简述集合体系


目录

系列文章目录

前言

1、集合体系图解

2、Collection单列集合

2.1 Collection常用方法

2.2 Collection遍历方式

2.2.1 Collection-迭代器的基本使用

2.2.2 Collection-增强for的使用

2.3 Collection-List集合

2.3.1 List集合特有方法

2.3.2 ArrayList集合的遍历

2.3.3 ArrayList集合和LinkedList集合的区别

2.4 Collection-Set集合

2.4.1 Set集合的特点

2.4.2 TreeSet集合的遍历与排序

2.4.3 HashSet集合

3. Map双列集合

3.1 Map集合常用方法

3.2 Map集合的三种遍历方式

4. 哈希表哈希值

5. 二叉树、二叉查找树、平衡二叉树、红黑树

总结



前言

       集合是一个可变的容器,只能存储引用类型的数据。在编译期可以用泛型来约束元素的数据类型。集合体系可分为Collection和Map两大家族。


1、集合体系图解

   Collection为单列集合,其下又包含Lis体系和Set体系。

   Map为双列集合,其下主要有HashMap,TreeMap。

2dc7b73d61ff4261a547ffec4cc76b06.png

2、Collection单列集合

2.1 Collection常用方法

1c70c42f673f4abfabd2d791d1ba6861.png

2.2 Collection遍历方式

2.2.1 Collection-迭代器的基本使用

通过迭代器遍历Collection集合的步骤
     1.通过集合对象获取迭代器对象
     2.通过hasNext()方法循环判断迭代器对象中是否还有元素
     3.如果有元素,通过next()方法获取迭代器中的元素

1bffb2df1ece471892441d1a772619dc.png

2.2.2 Collection-增强for的使用

增强for循环定义格式
      for(数组/集合中元素的数据类型 变量名 : 数组/集合对象) {
            循环体;
      }

d129b3c8c5bd4b0c8151cc6ccc9958dd.png

2.3 Collection-List集合

2.3.1 List集合特有方法

List单列集合可重复且有索引、有序。

41f41c4ef7bf40b89f6d083ba37af023.png

2.3.2 ArrayList集合的遍历

d16cd9e6a1c946aba714958aacb377c6.png

2.3.3 ArrayList集合和LinkedList集合的区别

  1. ArrayList底层是数组结构,查询快增删慢  
  2. LinkedList底层是链表结构,增删快查询慢

       原因:数组可以直接通过索引定位,查询快,增删时要后移或者前移该索引处的所有元素,增删慢,链表查询要从头节点一个一个差比较慢,增删时直接改变指向的地址值所以增删快。

2.4 Collection-Set集合

2.4.1 Set集合的特点

Set单列集合不可重复且无索引存取无序

2.4.2 TreeSet集合的遍历与排序

4c11a4376ee042268a63281f38b88017.png

TreeSet排序方案一:

941ac52be36d4180b766120528d25ae2.png

TreeSet排序方案二:

272ee3bbcd0846b6b231490136388b25.png

TreeSet两种排序的对比

自然排序
    1. 自定义类实现Comparable接口
    2. 重写compareTo方法,根据返回值进行排序
比较器排序
    1. 创建TreeSet对象的时候传递Comparator的实现类对象
    2. 重写compare方法,根据返回值进行排序
在使用的时候
    默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序

2.4.3 HashSet集合

d471cb48bf75463c871b4abf80e35636.png

65d89186238445e8ad04d5b13d8eae7f.png

HashSet集合特点:

1底层是哈希表结构
2没有索引且无序
3不能存储重复的元素

哈希值

没有重写:调用Object类中定义的hashCade方法获取哈希值 通过对象地址计算哈希值,不同对象的哈希值一定不同

重写:根据属性计算哈希值 两个对象属性值一样哈希值也一样

3. Map双列集合

3.1 Map集合常用方法

a2e658ae4fae492489f5a3e63e2bfc9a.png

3.2 Map集合的三种遍历方式

第一种遍历方式重点步骤
     1.通过keySet()方法获取所有键的集合
     2.遍历键的集合,拿到每一个键
     3.通过get()方法,通过键获取值

99bb948c364d42429a399ded79ad00c9.png

第二种遍历方式重点步骤
     1.获取所有键值对对象的集合,使用entrySet()实现
     2.遍历键值对对象集合,拿到每一个键值对对象
     3.调用键值对对象中的getKey()和getValue()方法获取键和值

879ebad489aa4a23bdf715c4329f74ae.png

第三种遍历方式使用forEach

0c4e4c0571774a3cb55ea9046f73b506.png

map双列集合,一个键对应一个值,键不可以重复,值可以重复

HashMap底层是哈希表结构的
    依赖hashCode方法和equals方法保证键的唯一
    如果键要存储的是自定义对象,需要重写hashCode和equals方法

TreeMap底层是红黑树结构的
    依赖自然排序或者比较器排序,对键进行排序
    如果键存储的是自定义对象,需要定义排序的规则

4. 哈希表哈希值

什么是哈希值,如何获取哈希值

      是JDK根据对象的地址或字符串或数字计算出来的一串int类型的数值,Object类中有一个方法:hashCode()用于获取哈希值

对象的哈希值特点

  1. 同一个对象多次调用hashCode()方法返回的哈希值是相同
  2. 默认情况下,不同对象的哈希值是不同的.而重写hashCode()方法,可以实现让不同对象的哈希值相同

HashSetJDK7底层原理

数据结构:

哈希表: 数组+链表(节点个数多于8个: 数组+红黑树)

原理解析:

1. 创建一个默认长度16,默认加载因子0.75的数组,数组名table

2. 根据元素的哈希值跟数组的长度计算出应存入的位置

3. 判断当前位置是否为null,如果是null直接存入

4. 如果位置不为null,表示有元素,则调用equals方法比较属性值

5. 如果一样,则不存,如果不一样,则存入数组,老元素挂在新元素下面

5. 二叉树、二叉查找树、平衡二叉树、红黑树

二叉查找树的特点

1. 每一个节点上最多有两个子节点

2. 左子树上所有节点的值都小于根节点的值

3. 右子树上所有节点的值都大于根节点的值

平衡二叉树的特点

二叉树左右两个子树的高度差不超过1

任意节点的左右两个子树都是一颗平衡二叉树

红黑树的红黑规则有哪些

1. 每一个节点或是红色的,或者是黑色的

2. 根节点必须是黑色

3. 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil        视为叶节点,每个叶节点(Nil)是黑色的

4. 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连 的情况)

5. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点

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

根节点位置:  直接变为黑色

非根节点位置:

        父节点为黑色:不需要任何操作,默认红色即可

        父节点为红色:

               叔叔节点为红色:

                      将"父节点"设为黑色,将"叔叔节点"设为黑色

                      将"祖父节点"设为红色

                      如果"祖父节点"为根节点,则将根节点再次变成黑色

 


总结

以上就是集合体系的相关内容,主要讲了单列和双列集合的相关实现类的基本使用以及底层原理。

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java的集合体系是Java中非常重要和常用的一部分,主要由四个核心接口:Collection、List、Set和Map组成。 Collection接口是集合体系的父接口,它是最基本的集合接口。它包含了一些常用的集合操作方法,如添加、删除、查找、遍历等。它的两个主要子接口是List和Set。 List接口代表了有序的集合,它的实现类有ArrayList、LinkedList和Vector等。List集合可以保留元素的插入顺序,并且允许重复元素存在。 Set接口代表了不允许重复元素的集合,它的实现类有HashSet、TreeSet和LinkedHashSet等。Set集合不保留元素的插入顺序,其主要特点是保证集合中没有重复的元素。 Map接口代表了键值对的集合,它的实现类有HashMap、TreeMap和LinkedHashMap等。Map集合中的键是唯一的,通过键可以快速查找对应的值。Map集合提供了根据键来存取数据的操作。 除了以上四个核心接口,还有许多与集合相关的类,如Stack、Queue、PriorityQueue等。它们都是集合的扩展和补充。 Java的集合体系具有很高的灵活性和扩展性,能够满足各种不同的需求。通过不同的集合类型和方法的运用,我们可以更高效地管理和操作数据。在实际应用中,根据具体的业务需求,选择合适的集合类型和方法进行使用,能够提高程序的性能和效率。 总结来说,Java的集合体系是非常重要的一部分,掌握了集合的基本使用方法和常见操作,对于Java程序的开发和设计是非常有帮助的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值