java集合

集合/容器

集合概念

为了解决数据存储单一的情况,java中提供了许多不同结构的集合类,让我们可以根据不同的场景进行数据存储选择

集合API

集合体系概述

java的集合框架是由很多接口,抽象类,具体类组成的,都位于java.util包中

单列集合:一次放进去一个值(对象)

List接口及实现类

继承了Collection类,可以有重复元素

ArrayList:数组列表

底层有一个数组,可以动态扩展数组长度,并提供一个一系列方法操作

查询快,插入和删除慢

add()

默认是向末尾添加元素,先判断是否满,如果不满则添加元素,如果满了,则扩容

LInkedList:链表列表

底层是一个链表结构

查询慢,插入和删除快

Vector:数组列表,线程安全的

List接口集合迭代

List集合遍历方式

for循环

允许操作元素,注意索引的变化与元素位置的移动

增强for循环

不允许对元素进行操作

迭代器遍历

Set接口

Set中存储的元素是不重复的

HashSet

元素是无序的

我们向集合中添加一个元素时,如果每次都使用equals比较内容是否相等效率会很低

一般用的是hashcode(不是Object中的),会调用的是类中重写的hashcode,返回的是根据内容计算的哈希值,遍历时,会用哈希值先比较是否相等,但是哈希值会存在问题,内容不同,哈希值相同,此种情况下再调用equals来比较内容

TreeSet

可以给Set集合中的元素进行指定方式的排序,存储的对象必须实现Comparable接口,重写compareTo(),每次添加元素时,调用compareTo()进行元素大小判断(小于0放在左节点,等于0表示元素重复**(不会覆盖原来的元素)**,大于0放到右节点)

双列集合

Map接口

共性:键不能重复,值可以重复,通过键可以找到值,一个键只能映射一个值

HashMap

可以存储一个为null的键,值可以为null

底层使用的是Node类型的数组,数组默认长度为16,数组的每个位置上都是一个链表,当链表长度大于8且数组长度大于64时,链表会转化为红黑树,添加元素的时,会通过键的哈希值来确定数组的位置,如果添加的元素与已有的元素重复,那么覆盖原有的元素,如果没有重复,则添加到next节点上

键是无序的,key不能重复

TreeMap

底层使用的是树结构

Hashtable

方法上都添加了锁

不能存储为null的键和为null的值

Map遍历

1.先拿到所有的键,遍历键,根据键寻找值

2.使用entryset遍历

Collections类

addAll

添加一个能改变长度的数值到集合里

swap

交换对应位置上的元素

copy

集合复制,将源集合复制到目标集合,要求目标集合size大于等于源集合

fill

用指定的值,替换到集合中的所有元素

shuffle

随机排序

下图是集合的结构图

相关推荐
lexiangqicheng7 分钟前
1,自定义表单通俗理解-PC设计APP渲染
java·前端·javascript
quantdash_cc9 分钟前
如何给自己的量化策略增加独立数据层?从数据获取到策略解耦的 Python 实践
开发语言·python·数据分析·量化交易·股票数据·quantdash
NeoGressAI外贸数字化10 分钟前
外贸独立站3类页面合格度,怎么用脚本一次跑完
开发语言·python
南极企鹅16 分钟前
生产环境gc文件分析
java·jvm·算法
Wang's Blog17 分钟前
Java 项目实战: 交友项目 - 前后端分离的工程实践
java·spring cloud·架构
X北辰北21 分钟前
C++ 进阶第二阶段总结|STL容器全家桶、迭代器失效、STL算法、序列化入门(工程必备)
开发语言·c++·算法
溪语流沙26 分钟前
面试加分项!Manacher:O(n)求最长回文子串的对称之美
java·python·leetcode·面试·职场和发展
知守观26 分钟前
Maven SNAPSHOT 更新排查:-U 无效、clean 无用,问题在 _remote.repositories(附完整链路)
java·后端·maven
牛战士coding27 分钟前
从一句\“取消订单\“到退款通知:AI 写操作完整业务闭环
java·人工智能