回炉重造java----单列集合(List,Set)

体系结构:  集合主要分为两种,单列集合collection和双列集合Map,区别在于单列集合一次插入一条数据,而双列的一次插入类似于key-value的形式

单列集合collection

294a9d0a1bc64a7ea78ef4c9eab9bc64.jpg

注:红色的表示是接口,蓝色的是实现类

7aa0297e45ba47c1bb2d024735e3dead.jpg

①操作功能:

714219247fc94d5abe7479f485de75f4.jpg增加: add(),List的新增一定是成功的,而Set不一定因为其有不能重复的限制条件

清空:clear()

删除:remove(),因为collection中定义的是共性的方法,所以删除不能通过索引去删除

判断是否存在:contains(),其底层是通过equals()方法实现的,因为equals()方法是基于比较地址值,所以如果集合中存的是对象的话,要重写equals()方法才能进行contains的比较

判断是否为空:isEmpty()

返回集合大小:size()

②遍历方式:

集合的遍历方式有三种,分别是迭代器遍历,增强for遍历和lambda表达式遍历

迭代器(Iterator)遍历:创建Iterator对象进行遍历

5dc442935a4e4233a7cde1b71295cd99.jpg

注:   迭代完毕指针不会复位;循环中next()只能用一次;迭代过程中不允许使用集合的方法增加删除

增强for遍历:底层其实就是迭代器   

b21d3e1c4a9b4367a1d375cb91fc18fa.jpg

注:   集合名.for快速生成;对s中的修改不对集合的原数据有影响

Lambda表达式(foreach)遍历:底层就是遍历集合通过accept方法依次过的元素

170150d4c6224a02bf46febc5a95b1d8.jpg

③List

db5e5cc96ca6443497d9fc1ce5840778.jpg

 注:  remove的时候如果有方法重载了,优先调用形参和实参类型一样的方法。remove(1)是索引

遍历方式:  相比于collection的3种遍历方式,List当然全部继承了,但是因为List有了索引的机制,所以List还增加了两种,普通的for循环和列表迭代器(listIterator)

cfc1c11724324f28aa473125afaffaeb.jpg

数据结构:

69b0b34aaed6469698d07d84e0a9ee47.jpg

 ArrayList详解:底层是数组

5a077adb8d5e42728fd64d62e12d44e3.jpg

 源码:277e9c1091b64dd98b0bc675227e8fd7.jpg

①创建ArrayList时是一个长度为0的elementData

②在插入第一个元素时,将扩容为长度为10的数组,然后把数据放进去

b389b39548a74bbbb9fcf0c8abbf7b83.jpg ①当原数组的长度已经用完了,底层就要去扩容,默认是扩容原数组长度的一半,即1.5倍

②如果插入的数据长度很大,就会扩容到大长度的地方

LinkedList详解:底层是双向链表

4e2c1c84214344dc87b5a70f3b4b30a0.jpg

 注: 这里的方法基本不用,而是基本使用List的方法

源码:学了数据结构中的双向链表就可以清楚的知道其操作流程

1c466b51d89940f1a5eaf119981a17a8.png

④Set

泛型: 

c4287671249543ea98a45f15d451104a.png

泛型的作用: 

704064569c2c4f04a83f7593fc0a3dd0.png

 java中的泛型其实是伪泛型:即其实底层存的时候依然是object对象,泛型会擦除

fb88d05e74f34aa08b9db07ac13fc2c8.png

泛型可以定义在类上,也可以定义在方法上,还可以定义在接口上 

HashSet详解:  底层是哈希表,jdk8之前是数组+链表,jdk8之后是数组+链表+红黑树

b6a6e82fe31b430c8e826b0a0f5edfd1.jpg

 存数据的过程:①由hashcode计算出应存入的位置②如果位置是空就放进去③如果不为空,则调用equals方法去判断是否一样的,如果一样的就不存④如果不一样的话,jdk8之前是把新元素放进去,老元素取出来挂在新元素后面,而jdk8之后就是直接把新元素挂在老元素的后面

80567b1f65c2472096030e5f51034e6e.jpg

 注意点:

c09cdad990244610be11fd64d2edcb87.jpg

LinkedHashSet详解:  底层跟HashSet一样,不过在其基础上加上了数据之间的双向链表结构,使得其变成有序的

7f1f2b86ae10442f8448bb84e6a84e2a.jpg

TreeSet详解:  底层是红黑树,性能好

e091477e82e14fb4b6d5e1b7c04b70c7.jpg

总结:各种单列集合的应用场景:

66bb62c3eef547d0b62c6aea025f73fd.jpg

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值