Set:存储的对象是无序的,不可以重复的
HashSet:底层使用的数据结果是哈希表,线程不安全的
保证对象唯一的方式: int hashCode() boolean equals(Object obj)
在添加对象时先用对象的哈希值和集合中对象的哈希值分别进行比较,如果和集合中所有对象的哈希值都不相同,那么直接把对象加入集合,如果出现哈希值相同的那么再调用 equals方法对象哈希值相同的两个对象进行比较,如果equals方法返回true则认为是同一对象,不把该对象加入集合,否则认为是不同的对象,加入集合
TreeSet: 底层使用的数据结构是二叉树, 线程不安全,可以对存入集合的对象进行排序
排序方式一:集合中对象所属的类 实现了Comparable接口中的int compareTo()方法
TreeSet依据该方法进行排序
保证对象唯一的方式: compareTo()方法的返回值是0
对HsahSet简单的说明
import java.util.*;
class Person
{
//Person类的方法让其对象的哈希值和equals的比较都一样
public int hashCode()
{
return 66;
}
public boolean equals(Object obj)//
{
return true;
}
}
class Demo8
{
public static void main(String[] args)
{
HashSet hs = new HashSet();
//在使用 add方法添加对象时就保证了对象的唯一
//hs.add("java01");
//hs.add("java02");
//hs.add("java01");
//这里只可以添加进一个对象
hs.add(new Person());
hs.add(new Person());
hs.add(new Person());
System.out.println(hs);
}
}