1.红黑树-概述
2.红黑树-红黑规则
添加的节点默认是黑色
添加的节点默认是红色
3.红黑树-添加节点后如何保持红黑规则1
4.红黑树-添加节点后如何保持红黑规则2
HashSet-基本使用
代码示例
public class HashSetDemo {
public static void main(String[] args) {
//创建集合对象
HashSet<String> set = new HashSet<String>();
//添加元素
set.add("hello");
set.add("world");
set.add("java");
//不包含重复元素的集合
set.add("world");
//遍历
for(String s : set) {
System.out.println(s);
}
}
}
要点
HashSet的特点:
- 无序
- 无索引
- 唯一
5.HashSet-哈希值
6.HashSet-JDK7底层原理解析
补充:
比较时,先比较hashCode,如果不同,认为是不同的元素,直接添加到集合,如果相同,再比较equals()
HashSet1.7版本原理总结
- 底层结构:哈希表。(数组+链表)
- 数组的长度默认为16,加载因子为0.75
- 首先会先获取元素的哈希值,计算出在数组中应存入的索引
判断该索引处是否为null
如果是null,直接添加
如果不是null,则与链表中所有的元素,通过equals方法比较属性值,只要有一个相同,就不存,如果都不一样,才会存入集合。
7.HashSet-JDK8底层优化
8.HashSet小结
9.Map-基本使用
代码示例
public class MapDemo01 {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map = new HashMap<>();
//V put(K key, V value) 将指定的值与该映射中的指定键相关联
map.put("itheima001","林青霞");
map.put("itheima002","张曼玉");
map.put("itheima003","王祖贤");
map.put("itheima003","柳岩");
//输出集合对象
System.out.println(map);
}
}
10.Map-常用方法
代码示例
public class MapDemo02 {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map = new HashMap<String,String>();
//V put(K key,V value):添加元素
map.put("张无忌","赵敏");
map.put("郭靖","黄蓉");
map.put("杨过","小龙女");
//V remove(Object key):根据键删除键值对元素
// System.out.println(map.remove("郭靖"));
// System.out.println(map.remove("郭襄"));
//void clear():移除所有的键值对元素
// map.clear();
//boolean containsKey(Object key):判断集合是否包含指定的键
// System.out.println(map.containsKey("郭靖"));
// System.out.println(map.containsKey("郭襄"));
//boolean isEmpty():判断集合是否为空
// System.out.println(map.isEmpty());
//int size():集合的长度,也就是集合中键值对的个数
System.out.println(map.size());
//输出集合对象
System.out.println(map);
}
}
11.Map-第一种遍历方式
Map遍历方式1:
- 先遍历键集
Set keySet() - 再通过键找值
V get(key)
代码示例
Map<String,String> map = new HashMap<>();
map.put("韦小宝","阿珂");
map.put("郭靖","黄蓉");
map.put("郑克爽","阿珂");
//得到所有键的集合
Set<String> keys = map.keySet();
//遍历键的集合
for (String key : keys) {
String value = map.get(key);
System.out.println(key + "=" + value);
}
//扩展方法
//得到所有值的集合
Collection<String> values = map.values();
for (String value : values) {
System.out.println(value);
}
12.Map-第二种遍历方式
Map遍历方式2:
- 先得到Entry<K,V>的集合
- 遍历得到每个Entry
- 获取Entry中的key和value
代码示例
Map<String,String> map = new HashMap<>();
map.put("韦小宝","阿珂");
map.put("郭靖","黄蓉");
map.put("郑克爽","阿珂");
//Set<Map.Entry<K,V>> entrySet()
//得到保存Entry的单列集合,每一个Entry就是一个家庭,包含一个键对象和值对象
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "=" + value);
}
13.Map功能小结
Map概述:
Map<K,V>是双列集合顶层接口
1.Map保存的是key和Value的一对对象
2.键是唯一的,值随意
/*
V put(K,V)
V remove(K);
V put(K,V)
V get(K)
1. CRUD + 遍历(3种) + containsKey() + containsValue()
isEmpty(), size()
keySet(),get(key)
entrySet(),getKey(),getValue()
forEach((key,Value)-> {});
*/
==================================================================================
HashMap,键是 String,可以保证键的唯一性,因为String类已经重写了hashCode和equals
HashMap,键是 Student,默认不能保证键的唯一性,要让键所在的类 Student重写hashCode()和equals()即可.
TreeMap<K,V>,红黑树的Map接口实现类
键是唯一
键可以排序
new TreeMap<Student,V>(): 空参构造,键所在类必须自然排序接口Comparable
new TreeMap<K,V>(Comparator)带参构造,传入一个比较器Comparator实现类对象
14.HashMap原理解析
要点
HashMap<String,String>,键是String,可以保证键的唯一性,因为String类已经重写了hashCode和equals
HashMap<Student,String>,键是Student,默认不能保证键的唯一性,要让键所在的类Student重写 hashCode()和 equals()即可.
15.TreeMap原理解析
要点
Map接口:
HashMap<K,V> ,键是唯一的
底层是哈希表,哈希表元素的唯一性 依赖元素的hashCode()和 equals()
HashMap<String,String>,键是String,可以保证键的唯一性,因为String类已经重写了hashCode和equals
HashMap<Student,String>,键是Student,默认不能保证键的唯一性,要让键所在的类Student重写hashCode和equals即可.
TreeMap<K,V> ,键是唯一的,键可以排序
底层红黑树, 只比较 key,不关心Value
TreeMap(),空参,自然排序,键 所在类必须实现 Comparable接口
TreeMap(Comparator),带参,比较器排序,构造集合时需传入Comparator实现类对象
15.总结
Map概述:
Map<K,V>是双列集合顶层接口
1.Map保存的是key和Value的一对对象
2.键是唯一的,值随意
/*
1. CRUD + 遍历(3种) + 是否包含key + 是否包含value
isEmpty(), size()
*/
==================================================================================
HashMap:底层是哈希表,哈希表=数组+链表+红黑树,哈希表确保元素唯一性依赖hashCode和equals
HashMap,键是String,可以保证键的唯一性,因为String类已经重写了hashCode和equals
HashMap,键是 Student,默认不能保证键的唯一性,要让键所在的类Student重写hashCode()和equals()即可.
TreeMap<K,V>,红黑树的Map接口实现
键是唯一
键可以排序
new TreeMap<Student,V>(): 空参构造,键所在类必须自然排序接口Comparable
new TreeMap<K,V>(Comparator)带参构造,传入一个比较器Comparator实现类对象
红黑树:
趋近于平衡的二叉查找树,添加,删除,查找性能很高.
红黑规则:
1.节点要么是红或黑
2.根节点是黑色的
3.两个红色节点不能一起
4.叶子节点是黑色的
5.每个节点到其叶子节点的简单路径上的黑色节点数目相同.