Java TreeMultiset是否只保存每个键的重复次数?
我用TreeMultiset尝试了以下代码。似乎“*Twin”条目被丢弃,重复次数存储在TreeMultiset中。我想这是一个特性,而不是一个bug。是否有一个对象存储每个对象,而不是一个键和重复次数Java TreeMultiset是否只保存每个键的重复次数?,java,guava,Java,Guava,我用TreeMultiset尝试了以下代码。似乎“*Twin”条目被丢弃,重复次数存储在TreeMultiset中。我想这是一个特性,而不是一个bug。是否有一个对象存储每个对象,而不是一个键和重复次数 public class Guava { public static class Obj implements Comparable<Obj> { String name; int age; public Obj(Stri
public class Guava {
public static class Obj implements Comparable<Obj> {
String name;
int age;
public Obj(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return String.format("%s@%d", name, age);
}
@Override
public int compareTo(Obj o) {
return Integer.compare(age, o.age);
}
}
public static void main(String[] args) {
TreeMultiset<Obj> tree = TreeMultiset.create();
tree.add(new Obj("Ajo", 37));
tree.add(new Obj("AjoTwin", 37));
tree.add(new Obj("Ari", 31));
tree.add(new Obj("AriTwin", 31));
tree.add(new Obj("Fly", 1));
System.out.println(tree.size());
for (Obj obj : tree) {
System.out.println(obj);
}
}
}
公共级番石榴{
公共静态类Obj实现了可比较的{
字符串名;
智力年龄;
公共对象(字符串名称,整数){
this.name=名称;
这个。年龄=年龄;
}
@凌驾
公共字符串toString(){
返回字符串。格式(“%s@%d”,名称,年龄);
}
@凌驾
公共国际比较(Obj o){
返回整数。比较(年龄,o.age);
}
}
公共静态void main(字符串[]args){
TreeMultiset tree=TreeMultiset.create();
添加(新的Obj(“Ajo”,37));
添加(新的Obj(“AjoTwin”,37));
添加(新Obj(“Ari”,31));
添加(新的Obj(“AriTwin”,31));
添加(新的Obj(“Fly”,1));
System.out.println(tree.size());
for(对象对象:树){
系统输出打印项次(obj);
}
}
}
如果你说两个对象相等,但实际上并不相等,这肯定会导致混淆。在本例中,我将使用Obj列表
对于您的示例,如果您更改了比较,您可以使用树集,但我认为您希望能够按整数查找。在这种情况下,您可以使用树形图。如果您说两个对象相等,但实际上并不相等,这必然会导致混淆。在本例中,我将使用Obj列表
对于您的示例,如果您更改了比较,您可以使用树集,但我认为您希望能够按整数查找。在这种情况下,您可以使用树形图。我们可以肯定的是: :请注意,
Multiset
不是Map
,尽管这可能是Multiset
实现的一部分Multiset
是一种真正的集合
类型,满足所有相关的合同义务
这意味着MultiSet
或多或少是一个同样重要的Set
(它没有实现Set
)。而且集合
不包含重复元素
真正的集合
也只保留插入的第一个元素,并丢弃任何其他相等的元素
:如果此集合已包含元素,则调用将保持集合不变并返回false
由于TreeMultiSet
使用compareTo
而不是equals
,因此您必须得到您得到的结果
注意:您应该实现.equals
模拟到.compareTo
:
:比较必须与可比等级规范中解释的相等值一致。否则,生成的multiset将违反集合约定,该约定是根据Object.equals(java.lang.Object)指定的
如果您想要可以存储多个元素的东西,请尝试使用
(列表)MultiMap
。这基本上是一个映射
,如果元素具有相同的键,它会自动将元素添加到列表中。我们可以肯定的是:
:请注意,Multiset
不是Map
,尽管这可能是Multiset
实现的一部分Multiset
是一种真正的集合
类型,满足所有相关的合同义务
这意味着MultiSet
或多或少是一个同样重要的Set
(它没有实现Set
)。而且集合
不包含重复元素
真正的集合
也只保留插入的第一个元素,并丢弃任何其他相等的元素
:如果此集合已包含元素,则调用将保持集合不变并返回false
由于TreeMultiSet
使用compareTo
而不是equals
,因此您必须得到您得到的结果
注意:您应该实现.equals
模拟到.compareTo
:
:比较必须与可比等级规范中解释的相等值一致。否则,生成的multiset将违反集合约定,该约定是根据Object.equals(java.lang.Object)指定的
如果您想要可以存储多个元素的东西,请尝试使用
(列表)MultiMap
。这基本上是一个映射
,如果元素具有相同的键,它会自动将元素添加到列表中。如果您想要一个集合来维护多个相等的元素
,您不应该使用集合
。您可能需要考虑使用equals
的正常实现,并对相同年龄的行为使用equality
。如果您想要一个集合来维护多个相等的元素,则不应该使用集合。您可能需要考虑使用equals
的正常实现,并对相同年龄的行为使用equality
。