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

随机排序

下图是集合的结构图

相关推荐
2501_947575801 小时前
计算机毕业设计之jsp开山车行二手车交易系统
java·开发语言·hadoop·python·信息可视化·django·课程设计
骑士雄师1 小时前
java面试题 4:鉴权
java·开发语言
时间的拾荒人2 小时前
C语言字符函数与字符串函数完全指南
c语言·开发语言
帅次2 小时前
Android 高级工程师面试:Java 基础知识 近1年高频追问 22 题
android·java·面试
蓝胖的四次元口袋3 小时前
Java集合(4)
java·哈希算法
2501_948106913 小时前
计算机毕业设计之基于jsp教科研信息共享系统
java·开发语言·信息可视化·spark·课程设计
TanYYF3 小时前
spring ai入门教程二
java·人工智能·spring
SeeYa-J3 小时前
Spring IOC(Inversion of Control)
java·spring·rpc
取经蜗牛3 小时前
Python 第一阶段完全指南:从零到第一个实用工具
开发语言·python
不会c+4 小时前
02-SpringBoot配置文件
java·spring boot·后端