1.Set集合概述
特征:
无序,不可重复
无序:添加顺序和存储顺序不一致 【不代表有排序效果】
不可重复:在一个Set集合中不能出现相同元素
interface Set<E>
--| class HashSet<E> 底层是哈希表存储数据
--| class TreeSet<E>地城存储数据是一个平衡二叉树
package set;
import java.util.HashSet;
public class Demo1 {
public static void main(String[] args) {
HashSet<Integer> hashSet = new HashSet<Integer>();
hashSet.add(3);
hashSet.add(2);
hashSet.add(5);
hashSet.add(1);
hashSet.add(4);
hashSet.add(1);
System.out.println(hashSet);
}
}
2.HashSet<E>
2.1 底层结构
import java.util.HashSet;
public class Demo2 {
public static void main(String[] args) {
HashSet<Person> hashSet = new HashSet<Person>();
Person p1 = new Person(1, "宝哥", 10);
Person p2 = new Person(2, "大熊", 15);
Person p3 = new Person(3, "骚磊", 2);
Person p4 = new Person(4, "骚杰", -5);
Person p5 = new Person(5, "林妹妹", 11);
/*
* 当前这里两个元素,ID一样 ==> hashCode值是一致,会通过底层哈希表运算
* 保存到同一个单元格位置。
* 这里会通过equals方法,比较两个对象是否一致,来决定是否能够保存。
* 如果两个对象一致,无法保存。
*
* 期望每一个哈希表单元格内保存的数据是唯一
*/
Person p6 = new Person(6, "康爷", 8);
Person p7 = new Person(6, "康牙", 10);
hashSet.add(p4);
hashSet.add(p6);
hashSet.add(p3);
hashSet.add(p5);
hashSet.add(p2);
hashSet.add(p1);
hashSet.add(p7);
System.out.println(hashSet);
}
}
3 TreeSet
3.1 Tree树形结构
3.2TreeSet存储演示
没有比较方式无法存储
3.3Comparable 接口使用
interface Comparable<T>{
int comparable(T t);
}
方法参数为T类型,由实现类遵从接口时约束,
CompareTo方法,返回值类型int类型,0,负数,整数
0表示两个元素一致,如果在TreeSet中比较 结果为0,表示结果为0,表示同一个元素,无法存储第二个。
Comparable接口由存储元素对应的类遵从,完成该方法。
3.4 Comparable接口使用
interface Comparable<T>{
int comparable(T o1,T o2)
}