Set:集合里面的元素是无序的(存入和取出的顺序不一致),元素不可以重复。
HashSet:底层数据结构是哈希表,线程是非同步的。
HashSet是如何保证元素的唯一性的呢?
1,是通过元素的两个方法,hashCode和equals。
2,如果两个hashCode值相同,才会判断equals是否为true。
3,如果元素的HashCode值不同,不会调用equals。
对于判断元素是否存在,以及删除等操作,依赖的也是元素的hashCode和equals方法。
TreeSet:可以对集合中的元素进行排序。
1,添加的元素一定要具有比较性。
2,什么是比较性,比较性就是指一个对象是否拥有compareTo方法
3,自己创建的类没有比较方法怎么办?可以让类实现 Comparable接口,并实现其中的compareTo方法。
4,排序时,当主要条件相同时,一定要判断一下次要条件。
TreeSet源码实例- import java.util.TreeSet;
- import java.util.Iterator;
- public class TreeSetTest {
- private static void printString(Object next) {
- System.out.println(next);
-
- }
- public static void main(String[] args) {
- TreeSet ts = new TreeSet();
- ts.add(new myStudent("lisi02",22));
- ts.add(new myStudent("lisi07",25));
- ts.add(new myStudent("lisi04",23));
- ts.add(new myStudent("lisi05",24));
- ts.add(new myStudent("lisi08",24));
- ts.add(new myStudent("lisi06",26)); //
- Iterator it = ts.iterator();
- while(it.hasNext()){
- printString(((myStudent)it.next()).getName());
-
- }
- }
- }
- class myStudent implements Comparable{ //强制让这个类具备比较性
- private String name;
- private int age;
-
- public myStudent(String name,int age) {
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- @Override
- public int compareTo(Object o) {
- myStudent ms = (myStudent)o;
- System.out.println(this.getName() + " compareTo " + ms.getName());
- if(!(ms instanceof myStudent)){
- return 0;
- }
- if(this.age > ms.age)
- return 1;
- if(this.age == ms.age)
- return this.name.compareTo(ms.name);
- return -1;
- }
- }
复制代码 |