【java基础】11-集合03

1.红黑树-概述

红黑树-概述1
红黑树-概述2

2.红黑树-红黑规则

红黑规则
红黑规则2
添加的节点默认是黑色
红黑规则3
添加的节点默认是红色
红黑规则4

3.红黑树-添加节点后如何保持红黑规则1

红黑树-添加节点后如何保持红黑规则1

4.红黑树-添加节点后如何保持红黑规则2

红黑树-添加节点后如何保持红黑规则2
红黑树小结

HashSet-基本使用

HashSet基本使用1
代码示例

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底层原理解析

HS-JDK7-1
HS-JDK7-2
HS-JDK7-3
补充:

比较时,先比较hashCode,如果不同,认为是不同的元素,直接添加到集合,如果相同,再比较equals()

HashSet1.7版本原理总结

  • 底层结构:哈希表。(数组+链表)
  • 数组的长度默认为16,加载因子为0.75
  • 首先会先获取元素的哈希值,计算出在数组中应存入的索引
    判断该索引处是否为null
    如果是null,直接添加
    如果不是null,则与链表中所有的元素,通过equals方法比较属性值,只要有一个相同,就不存,如果都不一样,才会存入集合。

7.HashSet-JDK8底层优化

HashSet1.8版本原理解析1
HashSet1.8版本原理解析2
HashSet1.8版本的存储流程

8.HashSet小结

HashSet小结

9.Map-基本使用

Map-1
Map-2
Map-3
代码示例

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-常用方法

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
Map遍历1代码
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第二种遍历方式
Map遍历2代码
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的添加规则
HashMap小结
要点

HashMap<String,String>,键是String,可以保证键的唯一性,因为String类已经重写了hashCode和equals
HashMap<Student,String>,键是Student,默认不能保证键的唯一性,要让键所在的类Student重写 hashCode()equals()即可.

15.TreeMap原理解析

TreeMap原理
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.每个节点到其叶子节点的简单路径上的黑色节点数目相同.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值