JavaSE中比较重要的内容(集合)

集合(java SE中比较重要的一点)

集合:相同类型的归类,放到一个容器里面

集合和数组相似点

都可以存储多个对象,对外作为一个整体存在

数组的缺点

长度必须在初始化的时候固定

采用连续存储空间,删除和添加效率低下

数组无法直接保存映射关系

数组缺乏封装,操作繁琐

集合简图

虚线是接口,实线是类

集合架构

Collection接口存储一组不唯一,无序的对象

List接口存储一组不唯一,有序(索引顺序)的对象

Set接口存储一组唯一,无序的对象

Map接口存储一组键值对象,提供Key到Value的映射

Key 唯一 无序

Value 不唯一 无序

List集合

List集合的主要实现类有ArrayList和LinkedList,分别是数据结构中顺序表和链表的实现。另外还包括栈和队列的实现类:Deque和Queue

ArrayList

在内存中分配连续的空间,实现了长度可变的数组

优点:遍历元素和随机访问元素的效率比较高

缺点:添加和删除需大量移动元素效率低,按照内容查询效率低

LinkedList

采用双向链表存储方式

缺点:遍历和随机访问元素效率低下

优点:插入、删除元素效率比较高(但是前提也是必须先低效率查询才可,如果插入删除发生在头尾可以减少查询次数)

//集合中只能放引用数据类型

//数组中可以放基本数据类型,还可以存放引用数据类型

Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包

List泛型的使用

arraylist

缺点:添加元素是可以加入任何类型的,不安全

获取元素的时候需要进行强制类型转换,繁琐

为了简单还有安全

引入泛型:generic

ArrayList 源码解读

//接口可以是一个方法也不提供的,比如RandomAccess,Cloneable

JDK1.7中,使用无参数构造方法创建ArrayList对象时,默认底层数组长度是10,

JDK1.8中,使用无参数构造方法创建ArrayList对象时,默认底层数组长度是0,

第一次添加元素,容量不足就要进行扩容,默认增长50%

快捷键从源码回到原界面:ctrl+alt+左箭头

ArrayList中提供了一个内部类Itr,实现了Iterator接口,实现对集合的遍历

LinkedList双链表

Users\我是一只小馋猪\AppData\Roaming\Typora\typora-user-images\image-20221012201745988.png)

将ArrayList替换为LinkedList之后,不变的是什么?

1.后续操作代码没有变

2.执行结果没有变

变的是:

1.底层的数据结构发生了变化,数组----->双向链表

2.具体的操作方式发生了变化

LinkedList可以作为线性表,栈或者队列来使用

//实际开发中更多的是面向接口编程

什么时候使用ArrayList,什么时候使用LinkedList

ArrayList:按照索引随机访问,遍历集合

LinkedList:需要的添加,删除操作多的时候使用LinkedList

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值