java 中常见容器

本文主要描述Java中的常见容器和主要关系,在此记录以便复习
首先附上主要类的关系图
在这里插入图片描述
上图主要包括顶层接口Iterarable,注意不是Iterator
在这里插入图片描述上图是Iterable的主要方法
**

Collection接口

**
Collection的主要继承包括Set,List,Queue
下面分别详细梳理一下各个接口

List:

有序集合也成序列,可以精准控制每个元素的位置,可以通过整数索引确定元素。
特点:允许重复可以放置空元素
List接口的实现类包括了ArrayLIst,LinkedList,Vector

ArrayList

可调整大小的数组实现的,是不同步的实现,即线程不安全的,最大容量是Integer.Max_value - 8,有图有真相,减少8是怕有些虚拟机会造成oom,特点是它允许对元素进行快速随机访问,因为需要移动元素位置所以不适合插入和删除适合随机查找和遍历每次扩容是1.5倍
在这里插入图片描述

LinkedList

双链表,实现了List和Deque接口,可以当作堆栈和双向列表使用,实现是不同步的即线程不安全的是一个链表结构存储数据,适合动态的删除和插入,随机访问和遍历的速度较慢

Vector

实现了可自动增长的对象数组,可通过索引下标访问元素,是线程安全的,但是性能很慢不建议使用,扩容是扩容一倍。

Set

不包含重复元素的集合,可以用作去除重复元素
特点:不包含重复元素,无序性,确定性,单一性,判断唯一性使用的是equals方法,equals返回false Set才会接收这个对象,返回true则不接受这个对象。
主要实现类:HashSet,TreeSet,LinkedHashSet,EnumSet

HsahSet

实现了Set接口,由HashMap支持实现,允许存储null元素,此类为线程不安全的,适合存取和查找

LinkedHashSet

它是使用链表维护元素的次序,这样使得元素是以插入的顺序保存的,它的性能略低于HashSet,但是链表的结构适合遍历。

TreeSet

是一种可以保持元素有序且没有重复的集合,主要是因为通过NavigableMap实现的,当add时是需要往NavigableMap中put元素。

EnumSet

专门为枚举类设计的集合,EnumSet中所有元素必须是指定枚举类型的枚举值,EnumSet的集合元素也是有序的。

Queue

类似队列(FIFO)的数据结构,新插入的元素放在队尾,时间最长的元素放在队首。
特点:队列的特点
主要实现类:PriorityQueue(优先队列),Deque(双端队列)

PriorityQueue

优先队列,没有按照插入顺序存放元素,而是根据元素的某个属性的大小来排列,故而叫做优先队列。

Deque

双端队列,这是一个接口,主要实现类有ArrayDeque基于数组的双端队列和LinkedList

Map接口

由键映射到值的对象,不可以存放重复的键,每个键只能映射一个值。
特点:键不允许重复,value可以存储null
主要实现类:HashMap,LinkedHashMap,HashTable,TreeMap

HashMap

称为散列表,key和value都允许存储null值,key不允许重复,故只能存在一个null,主干就是一个Entry数组,Entry是HashMap的基本组成单元,初始化static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;(16)是16个单元,负载因子static final float DEFAULT_LOAD_FACTOR = 0.75f; 所以容量到达 12时就会扩容,java1.8之后通过拉链法链表长度超过8时就转换为红黑树,利用了红黑树快速增删改查的特点,1.8还改进了1.7的头插法改为尾插法。HashMap是线程不安全的。

HsahTable

默认初始容量是11,负载因子是0.75

LinkedHashMap

使用双向链表来维护key-value对的次序,与插入顺序一致。

TreeMap

TreeMap是一个红黑树结构,每对键值对都作为一个红黑树节点,TreeMap存储数据时需要对根据key对节点排序,由两种排序方式,自然排序和定制排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值