为了账号安全,请及时绑定邮箱和手机立即绑定

Java中是否有一个类可以保留数据的重复项但不保留数据的顺序?

Java中是否有一个类可以保留数据的重复项但不保留数据的顺序?

白衣非少年 2023-09-20 14:37:09
我正在处理字谜,所以我只关心字符串中存在的字符,而不关心它们的顺序。我寻找合适的 Collection 类但没有成功。您能否建议任何可以帮助我保留 重复项但忽略顺序的课程?
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

您可以使用 aMap<Character,Integer>来计算 a 的每个字符出现的次数String。如果Map两个Strings 生成的 s 相等,您就会知道相应的Strings 是字谜词。


例如(这里我使用Map<Integer,Long>而不是Map<Character,Integer>因为它更方便):


String one = "animal";

String two = "manila";

Map<Integer,Long> mapOne = one.chars ().boxed().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));

Map<Integer,Long> mapTwo = two.chars ().boxed().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));

System.out.println ("Is anagram? " + mapOne.equals(mapTwo));

输出:


Is anagram? true


查看完整回答
反对 回复 2023-09-20
?
慕神8447489

TA贡献1780条经验 获得超1个赞

您可以使用 Google guava 的HashMultiSet. 该equals()方法正是这样做的:

比较指定对象与此多重集是否相等。如果给定对象也是多重集并且包含具有相同计数的相同元素(无论顺序如何),则返回 true。如果 object 是相同大小的多重集,并且对于每个元素,两个多重集具有相同的计数,则此实现返回 true。


查看完整回答
反对 回复 2023-09-20
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

除了有序的数据结构之外,还可以动态地对数据进行排序。


由于 Unicode 符号、代码点比 UTF-16 更好char,我将使用 Unicodeint代替:


int[] canonical(String s) {

    return s.codePoints().sorted().toArray();

}


boolean isAnagram(String s, String t) {

    return Arrays.equals(canonical(s), canonical(t));

}


boolean isAnagram(int[] s, String t) {

    return Arrays.equals(s, canonical(t));

}


查看完整回答
反对 回复 2023-09-20
  • 3 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信