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

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

单列集合collection

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

①操作功能:

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

清空:clear()

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

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

判断是否为空:isEmpty()

返回集合大小:size()

②遍历方式:

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

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

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

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

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

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

③List

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

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

数据结构:

ArrayList详解:底层是数组

源码:

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

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

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

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

LinkedList详解:底层是双向链表

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

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

④Set

泛型:

泛型的作用:

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

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

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

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

注意点:

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

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

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

相关推荐
\光辉岁月/4 分钟前
2.异常类
java·开发语言·异常类
淡海水5 分钟前
05-03-源码-Boehm GC分配与碎片管理
开发语言·算法·unity·c#·游戏引擎·gc
努力实干7 分钟前
C++ 面向对象与工程架构
开发语言·c++·架构
十年Java程序媛13 分钟前
JVM 基础与 GC 垃圾回收详解|可达性分析、分代模型、垃圾收集器、STW
java·开发语言·jvm·spring boot·后端·面试
估值探索者15 分钟前
【Python量化选股流水线 #03】候选股怎么排序?动量+低波+流动性三因子打分取 Top-N
开发语言·python·接口·api接口·股票数据接口·数据接口·股票数据api接口
骑士雄师15 分钟前
supervisor 中关于上下文多轮信息维护常用到的python语法
开发语言·python
苏三说技术17 分钟前
为什么越来越多人用MinerU?
后端
曹牧24 分钟前
C#:字符串占位符与值数量不一致
开发语言·数据库·c#
2301_322414280427 分钟前
基于SSM框架的在线考试管理系统的设计与实现14750-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·redis·mysql·tomcat·maven·mybatis·ssm
SimonKing28 分钟前
别再找笔记了,试试这款轻量级的开源软件:local-notes
后端·程序员·开源