Set接口
特点:无序、无下标、元素不可重复
方法:全部继承自Collection中的方法
增、删、遍历、判断与collection一致
HashSet
特点
存储结构:哈希表(数组+链表+红黑树)
存储过程(重复依据)
- 根据hashCode计算保存的位置,如果位置为空,直接保存,若不为空,进行第二步
- 再执行equals方法,如果equals为true,则认为是重复,否则形成链表
不理解
- 基于HashCode计算元素存放位置
- 利用31这个质数,减少散列冲突
- 31提高执行效率31 * i = (i << 5) - i 转为移位操作
- 当存入元素的哈希码相同时,会调用equals进行确认,如果结果为true,则拒绝后者存入
/**
* @author 伍六七
* @date 2022/8/12 21:49
*/
public class hashset_demo {
public static void main(String[] args) {
//新建集合
HashSet<String> hashSet = new HashSet<String>();
//添加元素
hashSet.add("1");
hashSet.add("1");
hashSet.add("1");
hashSet.add("2");
hashSet.add("3");
System.out.println(hashSet);//[1, 2, 3]
//删除元素
hashSet.remove("1");
System.out.println(hashSet);//[2, 3]
//遍历操作
//1. 增强for
for(String set:hashSet){
System.out.print(set);//23
}
//2. 迭代器
Iterator<String> it = hashSet.iterator();
while(it.hasNext()){
String s = it.next();
System.out.printf(s+" ");//2 3
}
//判断
System.out.println(hashSet.contains("2"));//true
System.out.println(hashSet.isEmpty());//false
}
}
SortedSet接口
TreeSet
特点
- 基于排列顺序实现元素不重复
- 实现SortedSet接口(如果实现该接口需要重写方法),对集合元素自动排序
- 元素对象的类型必须实现Comparable接口,指定排序规则,默认升序
- 通过CompareTo方法确定是否为重复元素
存储结构:红黑树
常用方法
还是set方法
//创建集合
TreeSet<String> treeSet = new TreeSet<>();
//添加元素
treeSet.add();
//删除元素
treeSet.remove();
//遍历 1. 增强for 2. 迭代器
//判断
treeSet.contains();
补充:TreeSet集合的使用
Comparator 实现定制比较(比较器)
Comparable 可比较的
// 重写compare,算法也用到,也可以用Lambda表达式
@override
public int compare(Person o1, Person o2){
int n1 = o1.getAge()-o2.getAge();
int n2 = o1.getName().comareTo(o2.getName());
return n1 == 0 ? n2 : n1;
}