使用 HashMap 查找重复项

find duplicates using HashMap

我想查找 String 上的重复值。我知道还有其他解决方案可以找到,但我想使用 HashMap。这是我的解决方案。我在最后一部分缺少什么?我只想得到重复的字母

public static void doublicatess(String str) {
             
             HashMap <String , Integer> hashmap = new HashMap<>();
             String[] array = str.split("");
             for( String string : array) {
                 if(hashmap.get(string) == null) {
                     hashmap.put(string, 1);
                 }else {
                     hashmap.put(string, hashmap.get(string) + 1);
                 }
             }
             
             for(int i = 0 ; i < hashmap.size() ; i++) {
                 int target = hashmap.get(array[i]);
                 if(target > 1) {
                     System.out.print(hashmap.get(target));
                 }
             }
         }
public static void main(String[] args) {
        doublicatess("alaaass");
    }

输出为空,而它应该是 [a,s]

您正在使用 hashmap 大小进行迭代,并使用错误的计数对数组进行索引。

试试这个

for(Map.Entry<String, Integer> entry: hashmap.entrySet()) {
    int target = entry.getValue();
    if(target > 1) {
        System.out.print(entry.getKey());
    }
}

使用流,你可以用 functional/declarative 的方式写这个(可能对你来说更高级)

Arrays.stream(array)
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
            .entrySet()
            .stream()
            .filter(entry -> entry.getValue() > 1)
            .map(Map.Entry::getKey)
            .forEach(System.out::println);