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

随机排序

下图是集合的结构图

相关推荐
user_admin_god1 小时前
第 10 篇:拼上下文与生成——预算、边界与防幻觉
java·人工智能·spring boot·语言模型
用户3126874877201 小时前
GC 算法与垃圾收集器演进:从 Serial 到 ZGC
java
天天被压力1 小时前
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #02】涨停跌停与特色股池:5类股池接口一次拉全
java·人工智能·python
斯维赤1 小时前
从 @Tool 到 Agent 流水线:LangChain4j 进阶教学,一个库打全套
java·后端
zhanghaha13142 小时前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt
SimonKing2 小时前
SSE项目`nexus-sse`持续优化,不一样的视觉效果
java·后端·程序员
斑鸠喳喳2 小时前
读写锁模式 Read-Write Lock
java·后端
释厄6232 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
信誓旦旦的程序猿2 小时前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
小程序设计3 小时前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机