hashSet
hashSet采用的是hash表存储,本质是数组+链表的存储方式,根据不同的hash值存储到 相应的位置, 和hashMap的存储方式相同,但是hashSet是单列,hashMap是双列,hashSet不存储重复元素,所以hashSet存储的hashMap里面的健,因为键是不重复的. 对外表现的是无序的
public class SetDemo1 {
public static void main(String[] args) {
//set是不重复的
//hashSet不存储重复元素,当存入一个数据时,会先判断这个存入数据的hashCode值是多少,如果hashCode值相等,会调用equals方法比较是否相同
//当不相同的时候才存入集合中,hashSet底层是hashMap只不过是只用了健,没用值,因为键,是不允许重复的
Set<Student> set = new HashSet<Student>();
Student student1=new Student("张三",16);
Student student2=new Student("李四",15);
Student student3=new Student("李四",15);
Student student4=new Student("王五",15);
set.add(student1);
set.add(student2);
set.add(student3);
set.add(student4);
System.out.println(set);
}
}
treeSet
TreeSet底层实现是二叉树,是红黑树 自平衡二叉树(avl树) TreeSet不可以出现重复元素,是有序的,
public class TreeSetDemo1 {
public static void main(String[] args) {
//TreeSet底层实现是二叉树,是红黑树 自平衡二叉树(avl树) TreeSet不可以出现重复元素,是有序的,
// 必须实现conparable接口,根据数据的编码值排列 a,b,c,向TreeSet里面插入数据时,
// 会调用compareTo()方法比较大小,如果是放入自定义类型的类,需要去重写实现comparable接口,重写compareTo方法
Set treeSet = new TreeSet();
treeSet.add("a");
treeSet.add("b");
treeSet.add("c");
treeSet.add("a");
System.out.println(treeSet);
}
}