//HashSet基于HashMap實(shí)現(xiàn)的,利用了HashMap鍵不能重復(fù)的特點(diǎn)永脓;不可以排序
創(chuàng)建一個(gè)HashSet對(duì)象: HashSet set = new HashSet袍辞;
//TreeSet可以排序(根據(jù)內(nèi)容進(jìn)行排序)? 可以對(duì)數(shù)字和字符串進(jìn)行排序,因?yàn)閷?shí)現(xiàn)Comparable接口
Comparable接口? 如果接口中方法返回0 表示相等~~~
創(chuàng)建一個(gè)TreeSet對(duì)象: TreeSet set = new TreeSet常摧;
//如何判斷重復(fù)元素~~~~
1.只要obj == obj1? 認(rèn)為obj與obj1是相同的元素(地址相等~)
2.equals 與 hashCode 同時(shí)相等的時(shí)候搅吁,認(rèn)為是相同的元素
代碼:
class Person implements Comparable{
String name;
int age;
@Override //自定義輸出的時(shí)候
public String toString() {
return "name = " + this.name +" "+ "age = " + age;
}
@Override//自定義相等的規(guī)則
public boolean equals(Object obj) {
//如果類型不相同 返回false
if (!(obj instanceof Person)){
return false;
}
//如果名字一樣 返回true
if (((Person) obj).name.equals(this.name)) {
return true;
}
//如果名字不相同 返回false
return false;
}
//hashCode
@Override? //計(jì)算一個(gè)對(duì)象的hash值
public int hashCode() {
return this.name.hashCode();
}
//實(shí)現(xiàn)Comparable 接口
@Override
public int compareTo(Object o) {
//防止程序崩潰
if (o instanceof Person) {
Person p = (Person)o;
if (this.age > p.age) {//大
return 1;
}else if (this.age == p.age) {//相等
return 0;
}else {//小
return -1;
}
}
return 0;
}
}