Java高级集合篇
HashSet
采用hash表实现
元素不重复, 无序的, 允许存null
不能按下标读取元素,只能遍历
HashSet的常用方法:
//创建HashSet。 默认长度16, 加载因子为0.75
HashSet<String> set = new HashSet<>();
//往set添加元素
set.add("Java");
set.add("Html");
set.add("SQL");
set.add("Java");//重复的内容,在set里面只有一个
//返回元素的个数
System.out.println(set.size());
//遍历set的元素
for (String str : set) {
System.out.println(str);
}
//查找是否包含某个对象(对象要重写hashCode和equals)
System.out.println(set.contains("Java"));
//删除set的集合
set.remove("Java");
//清空set
set.clear();
//判断set是否是空的
System.out.println(set.isEmpty());
例:给出一个数组,请把数组中重复的元素去掉,返回一个新的数组
{1, 30, 25, 40, 18, 30, 22, 40}
int[] arr1 = {
1, 30, 25, 40, 18, 30, 22, 40};
HashSet<Integer> set = new HashSet<Integer>();
for (int a : arr1) {
set.add(a);
}
//定义新数组,长度跟set一样
int[] arr2 = new int[set.size()];
//数组的下标
int i = 0;
//遍历set
for (int a : set) {
arr2[i] = a; //把元素放进数组
i++; //下标的增加
}
//打印数组
System.out.println(Arrays.toString(arr2));
TreeSet
-
二叉树
每一个节点下面最多只有两个分支
-
满二叉树
除了叶子节点外,每个分支都有两个节点
-
完全二叉树
最底层的分支可以不是完全的,但是必须要先保证左边的分支全部填满
-
二叉查找树
左节点比父节点小,右节点比父节点大
- 红黑树
它就是一种自平衡二叉查找树
特征:
- 节点只有红色或黑色
- 根节点是黑色
- 叶子节点为黑色,叶子节点存NIL
- 一个节点为红色,则它的两个子节点必须为黑色(从根节点到叶子节点的所有路径,不可能存在两个连续的红色节点)
- 每个节点到叶子节点的所有路径,都包含相同数目的黑色节点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4vLuwZvf-1660539185057)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220815125117391.png)]
TreeSet的特性:
-
TreeSet采用红黑树数据结构来实现的。
-
不能添加null
-
不能添加重复的元素
-
添加的元素会被排序,遍历出来是按顺序排列的
-
TreeSet的元素必须要实现Comparable (如果没有实现Comparable 接口,运行时抛类型转换错误异常ClassCastException)
常用的方法:
TreeSet<Integer> set = new TreeSet<>();
set.add(20);
set.add(25);
set.add(8);
set.add(16);
//返回元素的个数
System.out.println("元素个数:" + set.size());
//返回排序后的第一个元素
System.out.