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

随机排序

下图是集合的结构图

相关推荐
SamDeepThinking7 分钟前
我们当年是如何真实落地BFF的?
java·后端·架构
码语智行9 分钟前
Shapefile获取空间数据和中心点坐标
java·arcgis
caoyc9 分钟前
RAG 赛道全景扫描:ragflow 一骑绝尘、微软谷歌跟进乏力、下半场属于 Agent
java
阿正的梦工坊15 分钟前
【Rust】09-泛型、Trait 与生命周期基础
开发语言·rust·c#
屋外雨大,惊蛰出没22 分钟前
深入浅出Spring Boot
java·spring boot·ioc·aop
阿正的梦工坊38 分钟前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
Zella折耳根42 分钟前
复习篇-继承和接口
java·开发语言·python
z落落1 小时前
C# 事件(Event)+自定义带参数事件例子
开发语言·分布式·c#
FlYFlOWERANDLEAF1 小时前
DevExpress Office File API使用记录
开发语言·c#·devoffice