集合的总结

本文深入探讨了集合与数组之间的区别,介绍了集合的各种类型及其特点,包括List、Set、Map等,并详细讲解了ArrayList、LinkedList的工作原理及应用场景。此外,还讨论了泛型的作用以及HashMap的内部实现。
摘要由CSDN通过智能技术生成

集合和数组的区别?

  1. 集合数据长度可变,数组不可变
  2. 集合访问方式灵活,数组访问方式单一
  3. 数组扩容缩容繁琐

集合的定义

存放对象的数据结构,提供操作对象的方法

cllection的根接口提供了添加元素、管理元素的父接口公共方法

  1. list 数据有下标有序,可重复
  2. Set 数据无下标 无序 不可重复
  3. Map接口  键值对的方式存数据 
addAll(collection c)将小集合添加到大集合中
contais(Object o )包含
toArray 集合转为数组
iterator返迭代器,遍历集合中的对象

迭代

迭代步骤: *

  1. 1.获取集合的迭代器 c.iterator(); *
  2. 2.判断集合中是否有下一个可迭代的元素 it.hasNext()
  3. * 3.获取当前迭代到的元素 it.next()

泛型的作用

  1. 约束集合中数据类型,
  2. 引用类型,
  3. 编译器可以在编译期根据泛型约束提供一定的类型安全检查,这样可以避免程序运行时才暴露BUG,代码的通用性也会更强,提高可读性

在这里插入图片描述

 

泛型怎么来的

为了在编译器检查数据类型,传入的参数是否正确,防止启动保错,

List接口

有序:有序的colletion(也称为序列).此接口的用户可以对列表中的每个元素的插入位置进行精确的控制,用户可以根据元素的整数索引(在列表中的位置)来访问元素,并搜索列表中的元素.

集合的迭代方式: *

1.for循环 *

2.高效for循环 *

3.iterator *  Iterator<E>--父接口--hasNext() 判断是否有下一个元素迭代,next()当前元素

4.listIterator  --子接口,逆序迭代hasPrevious() 判断是否有上一个元素可迭代previous()打印获取到的上一个元素

ArrayList

  1. 内部是用数组结构存放数据,封装数组的操作,有下标
  2. 默认初始容量为10 ,不够以1.5 倍增长
  3. 查快,删改慢

LINKEDList

  1. 链表,底层维护为链表,无序,不重复首尾查询快,中间慢

MaP(put)

  1. Map可以根据键来提取对应的值
  2. Map的键不允许重复,如果重复,对应的值会被覆盖
  3. Map存放的都是无序的数据
  4. Map的初始容量是16,默认的加载因子是0.75,存到75%开始扩容,按照2的次幂进行扩容

map的轶代

  1. 把map转为set集合,因为map没有轶代器,iterator,所有key存在map.keySet()
  2. it.hasNext() 判断是佛有下一个元素可以轶代
  3. it.next 拿到本轮循环中获取到map的key

第二种

  1. 把map中的键值对作为一个Entry整体放入set    map.entrySet()
  2. HashMap的键要同时重写hashCode()和equlas()
  3. hashCode()用来判定二者的hash值是否相同,重写后根据属性生成
  4. equlas()用来判断属性的值是否相同,重写后,根据属性判断
  5. –equlas()判断数据如果相等,hashCode()必须相同
  6. –equlas()判断数据如果不等,hashCode()尽量不同

  1.  HashMap的存储过程

  2. HashMap的结构是数组+链表 或者 数组+红黑树 的形式
  3. HashMap底层的Entry[ ]数组,初始容量为16,加载因子是0.75f,扩容按2的次幂扩容
  4. 当存放数据时,会根据hash(key)%n算法来计算数据的存放位置,n就是数组的长度,其实也就是集合的容量
  5. 当计算到的位置之前没有存过数据的时候,会直接存放数据
  6. 当计算的位置,有数据时,会发生hash冲突/hash碰撞
  7. 解决的办法就是采用链表的结构,在数组中指定位置处以后元素之后插入新的元素
  8. 也就是说数组中的元素都是最早加入的节点
  9. 如果链表的长度>8且数组长度>64时,链表会转为红黑树,当链表的长度<6时,红黑树会重新恢复成链表

 Set集合的特点

  1. 数据无序且数据不允许重复
  2. HashSet : 底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K,存入内部的HashMap中。当然K仍然不许重复。允许使用NUll
  3. TreeSet : 底层是TreeMap,也是红黑树的形式,便于查找数

如果存放的是自定义类的对象,需要重写的equals()与hashCode(),才会去重,不然会认为我们对象地址值不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值