gpt4 book ai didi

java - 如何停止在java中重复打印

转载 作者:行者123 更新时间:2023-11-30 08:24:52 25 4
gpt4 key购买 nike

我正在使用以下代码打印 ArrayList 中的项目:

for(int i2 = 0; i2 < a.size(); i2++)
{
word2 = a.get(i2);
for(int j2 = 0; j2 < a.size(); j2++)
{
if(word2.equals(a.get(j2)))
{
counter++;
}
}
if(counter!=0)
{
System.out.println(word2 + " : " + counter);
}
counter = 0;
}

当我打印时,我不想打印出副本。就像现在一样,它将打印

Alphabet : 3
Alright : 3
Apple : 3
Alphabet : 3
Alright : 3
Apple : 3
Alphabet : 3
Alright : 3
Apple : 3

我只想打印

Alphabet : 3
Alright : 3
Apple : 3

如何让它不打印重复项?我必须使用 ArrayList 进行分配

最佳答案

另一种选择,虽然性能不是最好的(尽管它对您的应用程序来说已经足够,并且具有与您当前代码相似的性能特征),但它是创建一个临时的 Set保存唯一单词列表,然后使用 Collections.frequency() 计算原始列表中的出现次数,例如用你的ArrayList<String> a :

Set<String> unique = new HashSet<String>(a);

for (String word : unique)
System.out.println(word + " : " + Collections.frequency(a, word));

甚至只是:

for (String word : new HashSet<String>(a))
System.out.println(word + " : " + Collections.frequency(a, word));

这里的好处是代码简短明了。

您可以使用 TreeSet 如果你想按字母顺序打印单词,或者 LinkedHashSet 如果您想按第一次出现的顺序打印它们。

顺便说一句,上面没有存储供以后使用的计数,您的原始代码也没有这样做。但是,如果您想这样做,将结果存储在 map 中是微不足道的:

Map<String,Integer> wordCounts = new HashMap<String,Integer>();

for (String word : new HashSet<String>(a))
wordCounts.put(word, Collections.frequency(a, word));

// wordCounts now contains a map of strings -> counts.

关于java - 如何停止在java中重复打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22624069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com