Java中是否有一个类可以保存重复的数据,但不能保存数据的顺序?
我处理的是字谜,所以我只关心字符串中的字符,而不是它们的顺序。 我找了一个合适的收藏班,但没有找到 你能推荐一些能帮助我学习的课程吗 保留重复项但忽略顺序?您可以使用Java中是否有一个类可以保存重复的数据,但不能保存数据的顺序?,java,collections,anagram,Java,Collections,Anagram,我处理的是字谜,所以我只关心字符串中的字符,而不是它们的顺序。 我找了一个合适的收藏班,但没有找到 你能推荐一些能帮助我学习的课程吗 保留重复项但忽略顺序?您可以使用映射来计算字符串的每个字符出现的次数。如果为两个Strings生成的Maps相等,则您将知道相应的Strings是字谜 例如(这里我使用了Map而不是Map,因为这样更方便): 你可以用谷歌番石榴。equals()方法正是这样做的: 将指定的对象与此多重集进行比较以确定相等性。如果给定对象也是对象,则返回true 多集和包含相等计数
映射
来计算字符串的每个字符出现的次数。如果为两个String
s生成的Map
s相等,则您将知道相应的String
s是字谜
例如(这里我使用了Map
而不是Map
,因为这样更方便):
你可以用谷歌番石榴。equals()
方法正是这样做的:
将指定的对象与此多重集进行比较以确定相等性。如果给定对象也是对象,则返回true
多集和包含相等计数的相等元素,而不考虑
秩序。如果对象是
相同的大小,如果对于每个元素,两个多重集具有相同的
伯爵
除了有序的数据结构之外,还可以对数据进行动态排序
由于Unicode符号(代码点)优于UTF-16char
s,因此我将使用Unicodeint
s:
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));
}
? 或者只是一个映射
,其中整数
存储键的出现次数?实际上,如果您想检查字谜,排序集合也很有用。只要他们保留副本。这才是真正的原因,因为“ccba”与“cabc”在字谜上是相同的,但也与“abcc”在字谜上是相似的。因此,对两者进行排序将以“abcc”两次结束,这两次排序相等!
Is anagram? true
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));
}