我想找到两者之间的区别Set<T>
使用与类所使用的不同的平等度量T
,例如自定义Comparator<T>
例如,我有一堂课Animal
,通常使用物种来测试平等Animal
public class Animal {
public String species;
public String genus;
public Animal(String species, String genus){
this.species = species;
this.genus = genus;
}
public boolean equals(Animal other){
return other.species.equals(this.species);
}
}
我有两个List<Animal>
我想找到两个列表之间共享属的交集。
通常,我会转换List
to Set
并使用retainAll https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#retainAll(java.util.Collection)找到交点。但在这里,这将给出共享物种的交集,而不是共享属的交集。
我想用类似的东西GenusComparator
定义交集的相等性。
public class GenusComparator implements Comparator<Animal>{
@Override
public int compare(Animal animal1, Animal animal2) {
return String.CASE_INSENSITIVE_ORDER.compare(animal1.genus, animal2.genus);
}
}
这只是一个简单的示例来解释我想要做什么,而不是我的应用程序中的实际类。
我发现的两种可能的解决方案是
- 包装类并重写 equals 方法
- Use a TreeSet https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html使用自定义比较器
到目前为止我还错过了其他方法吗?这些解决方案可能有哪些优点和缺点?