上篇博文关于set想说的(一)之Set的实现类及必要的方法 ,总结了一些常见的Set实现类、各自的特点,以及各自实现类需要的方法。这篇博文写一个Demo。
Person.java
package org.fan.learn.set;
/**
* Created by Administrator on 2016/3/22.
*/
public class Person implements Comparable<Person> {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
//if (o == null || getClass() != o.getClass()) return false;
/*
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return name.equals(person.name);
*/
return o instanceof Person &&
(name.equals(((Person) o).name));
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
public int compareTo(Person o) {
if (this == o) return 0;
if (o == null) return 0;
Person person = (Person) o;
return name.compareTo(person.name);
}
}
其中equals()方法、hashCode()方法、toString()方法都是IDEA自动生成的。 compareTo方法IDEA会帮你生成框架,里面的内容要自己实现。
Main.java
package org.fan.learn.set;
import java.util.*;
/**
* Created by Administrator on 2016/3/22.
*/
public class SetTest {
public static void main(String[] args) {
//Integer中实现了Comparable接口,实现了equals方法,hashCode方法。
// Set<Integer> set = new HashSet<Integer>();
Set<Integer> set = new TreeSet<Integer>();
Collections.addAll(set, 1, 2, 1);
System.out.println("Integer Set : " + set);
//String中实现了Comparable接口,实现了equals方法,hashCode方法。
//Set<String> stringSet = new HashSet<String>();
Set<String> stringSet = new TreeSet<String>();
//Collections.addAll(stringSet, "12", "034");
Collections.addAll(stringSet, "12 034".split(" "));
System.out.println("String Set : " + stringSet);
Person p1 = new Person("fan");
Person p2 = new Person("hehe");
Person p3 = new Person("fan");
Person p4 = new Person("axyz");
//Person p5 = null; //加到TreeSet中会报错,NPE(NullPointerException),因为往里放时会调用compareTo方法。
Set<Person> personHashSet = new HashSet<Person>();
Collections.addAll(personHashSet, p1, p2, p3, p4);
System.out.println("personHashSet : " + personHashSet); //顺序不一定
Set<Person> personLinkedHashSet = new LinkedHashSet<Person>();
Collections.addAll(personLinkedHashSet, p1, p2, p3, p4);
System.out.println("personLinkedHashSet : " + personLinkedHashSet); //按照插入顺序
Set<Person> personTreeSet = new TreeSet<Person>();
Collections.addAll(personTreeSet, p1, p2, p3, p4);
System.out.println("personTreeSet : " + personTreeSet); //按照字母顺序
}
}
执行结果如下所示: