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

我正在处理字谜,所以我只关心字符串中存在的字符,而不关心它们的顺序。我寻找合适的 Collection 类但没有成功。

您能否建议任何可以帮助我保留 重复项但忽略顺序的课程?


白衣非少年
浏览 88回答 3
3回答

MM们

您可以使用 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

慕神8447489

您可以使用 Google guava 的HashMultiSet. 该equals()方法正是这样做的:比较指定对象与此多重集是否相等。如果给定对象也是多重集并且包含具有相同计数的相同元素(无论顺序如何),则返回 true。如果 object 是相同大小的多重集,并且对于每个元素,两个多重集具有相同的计数,则此实现返回 true。

子衿沉夜

除了有序的数据结构之外,还可以动态地对数据进行排序。由于 Unicode 符号、代码点比 UTF-16 更好char,我将使用 Unicodeint代替:int[] canonical(String s) {&nbsp; &nbsp; return s.codePoints().sorted().toArray();}boolean isAnagram(String s, String t) {&nbsp; &nbsp; return Arrays.equals(canonical(s), canonical(t));}boolean isAnagram(int[] s, String t) {&nbsp; &nbsp; return Arrays.equals(s, canonical(t));}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java