我正在Oracle Docs Java中浏览Java Collections
。我无法从下面找出几行代码。
该程序分割重复的单词,独特的单词。
public class FindDups {
public static void main(String[] args) {
Set<String> uniques = new HashSet<String>();
Set<String> dups = new HashSet<String>();
for (String a : args)
if (!uniques.add(a))
dups.add(a);
// Destructive set-difference
uniques.removeAll(dups);
System.out.println("Unique words: " + uniques);
System.out.println("Duplicate words: " + dups);
}
}
我无法获得这些线路。任何人都可以解释,实际上是什么 发生在这里?
for (String a : args) if (!uniques.add(a)) dups.add(a);
答案 0 :(得分:2)
来自add
Set
方法的true
:
for (String a : args)
如果此集合尚未包含指定的元素
所以代码的作用是:
args
:迭代存储在if (!uniques.add(a))
数组中的所有输入字符串。true
:如果add方法返回Set
,则该字符串是唯一的,并已成功添加到uniques
add
,因为它尚未包含,但是(请参阅文档)。否则,false
方法会返回a
(当前字符串Set
已包含在uniques
dups.add(a);
中,所以...... Set
:...将其添加到重复元素的Set
。作为初学者的注释,a
只能包含一次的单个元素。因此,如果uniques
已经在uniques.add(a)
,则true
只会返回false
,但实际上不会添加。如果没有,则添加元素并返回var gamekeys = JSON.parse(fs.readFileSync('gamekeys.json'));
var jsonstring = JSON.stringify(gamekeys, null, 4);
UpdateGamePricelist();
function UpdateGamePricelist() {
for(var i = 0;i<gamekeys.keys.length;i++) {
appid = gamekeys.keys[i].appid;
var apiurl = "http://store.steampowered.com/api/appdetails?appids="+appid;
if (i < 95) {
request(apiurl, function(err, response, body) {
if (err) {
console.log("Error when updating game prices: " + err+"\n");
return;
}
var apiresponse = JSON.parse(body);
if (body == "") {
console.log("Could not find a pricelist m8");
return;
}
fs.writeFile("C:/Users/ahmad/Desktop/Bots/SteamKeyProfitter/gamespricelist/"+appid+".json", body, function(err) {
if(err) {
console.log("Error saving data to game pricelist: " + err);
return;
}
console.log("Game pricelist has been updated!");
});
});
}
}
}
。
答案 1 :(得分:2)
有关add
的文档:
返回: 如果此set尚未包含指定的元素
,则返回true
这意味着代码&#34;尝试&#34;将对象插入uniques
,如果add
返回false
,则对象已经存在,意味着它实际上是重复的 - 因此如果{dups
,它会被插入uniques.add
1}}是false
。
之后dups
中的所有条目都会从uniques
中删除:
uniques.removeAll(dups);
之后uniques
仅包含仅出现一次的字符串,而dups
包含多次出现的所有字符串。
答案 2 :(得分:1)
if (!uniques.add(a))
如果已添加的单词不在集合中,则uniques.add(a)将返回True。如果它在里面则为False(此方法返回Boolean类型)。
dups.add(a);
因此,如果它看到该单词已经在该集合中,则会将其添加到欺骗集中。
希望有所帮助!