使用 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);
我想查找 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);