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

随机排序

下图是集合的结构图

相关推荐
m0_571957581 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
一点媛艺2 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风2 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生3 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2343 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程4 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go