Java 树集副本
我试着理解别人的代码Java 树集副本,java,collections,set,treeset,Java,Collections,Set,Treeset,我试着理解别人的代码 public class Card { String symbol; int no; public String getSymbol() { return symbol; } public void setSymbol(String symbol) { this.symbol = symbol; } public int getNo() { return no;
public class Card {
String symbol;
int no;
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String toString(){
return symbol+" "+no;
}
}
class MyComparator1 implements Comparator<Card> {
@Override
public int compare(Card arg0, Card arg1) {
return arg0.getSymbol().compareTo(arg1.getSymbol());
}
}
public class Card2 {
public static void main(String[] args) {
Card c2;
Scanner s = new Scanner(System.in);
Set<Card> c = new TreeSet<Card>(new MyComparator1());
while(c.size()<4) {
System.out.println("Enter symbol and number");
String symbol = s.next();
int no = s.nextInt();
c2 = new Card();
c2.setSymbol(symbol);
c2.setNo(no);
c.add(c2);
}
Iterator<Card> it = c.iterator();
{
while (it.hasNext()) {
Card c1 = it.next();
System.out.println(c1.toString());
}
}
}
}
输出为
a 1
b 2
c 2
d 2
在这个集合中,如何识别b 2和b 4之间的差异?
如果我们使用map和symbol作为键,那么它是可以理解的,但是set如何找到相似性,我们只是在传递Card对象?传递给
树集的构造函数的MyComparator1
实例确定哪些对象是唯一的。在您的示例中,决定唯一性的是符号
属性
不过,使用符号
和否
来确定唯一性会更有意义,因为具有相同符号但不同编号的两张卡不应被视为相同(例如B2
和B4
不应被视为相同)。您的比较器只查看符号值。你为什么感到惊讶?还有,D2
是如何变成D4
?感谢您找到了错误。Ok comparator找到了唯一性。当我们实现可比较的???@AyushGoyal时,这是相同的吗?它是相似的。创建树集时,可以使用自然排序(Comparable)或自定义排序(Comparator)。
a 1
b 2
c 2
d 2