Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中是否有一个类可以保存重复的数据,但不能保存数据的顺序?_Java_Collections_Anagram - Fatal编程技术网

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-16
char
s,因此我将使用Unicode
int
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));
}