我想在字符串数组中找到所有非重复项 假设我:
String[] str = {"Red", "Red", "Green", "Green", "Blue"};
我想找到“Blue”,因为它不再重复。
我怎样才能做到这一点?
答案 0 :(得分:2)
其中一个解决方案是使用String创建Map作为键,使用Integer作为值。您将不得不遍历数组并增加地图中String的数量。
String[] str = {"Red", "Red", "Green", "Green", "Blue"};
Map<String,Integer> stringsCount = new HashMap<String,Integer>();
for (String s : str){
if (!stringsCount.containsKey(s))
stringsCount.put(s, 1);
else
stringsCount.put(s, stringsCount.get(s) + 1);
}
然后你可以打印每次只计算一次的字符串:
for (Map.Entry<String, Integer> entry : stringsCount.entrySet())
if (entry.getValue() == 1)
System.out.println(entry.getKey());
答案 1 :(得分:0)
你可以:
在迭代结束时,列表将仅包含唯一元素。
请注意,这(显然)不会保留原始订单。
答案 2 :(得分:0)
您可以使用HashSet。例如,这应该有效:
Set<String> getUniqueWords(String[] words) {
Set<String> uniqueWords = new HashSet<>();
Set<String> foundWords = new HashSet<>();
for (String word : words) {
if (foundWords.contains(word)) { //O(1)
uniqueWords.remove(word); //O(1)
} else {
uniqueWords.add(word); //O(1)
}
foundWords.add(word); //O(1)
}
return uniqueWords;
}
因此,使用这种方法,您将(理论上)具有线性时间复杂度,因为您通过数组在单个循环中获得了唯一的单词。