Java----容器

一. Java 容器


生活中容器用来包装或装载物品的贮存器,而在Java中,容器是用来装载对象的储存器。Java提供了丰富的容器类型,主要包括List、Set、Queue、Map 等,其中除了Map其余的三种都继承了Collection接口,如图所示:


二. 容器之间的区别


1.List: 可重复的容器;
2.Set:  不可重复的容器;
3.Queue:即队列,按照一定的规则进出;
4.Map:  即key-value 键值对,key与value 一一对应,其中key是不允许重复出现的。

三. 常用容器原理分析

3.1 Map 主要介绍HashMap/Hashtable/ConcurrentHashMap/TreeMap

        3.1.1 HashMap:底层是用一个单链表数组来存储Key-Value 键值对,原理是对Key进行Hash确认其在数组中的位置,然后在对应位置的的链表上进行增删查改;(Note:注意对hash()函数的重写)

        3.1.2 Hashtable:与HashMap 原理相同,只是通过synchronized关键字来保证了线程安全性;

        3.1.3 ConcurrentHashMap: 与HashMap 原理相同,主要解决了HashMap 的线程安全问题,同时又弥补了Hashtable 的效率问题。HashTable 是对象锁,而ConcurrentHashMap 锁的只是Key 所对应的某个链表。

3.1.4 TreeMap:底层是一颗红黑树,提供有序的Map,根据提供的comparator对key进行排序。LinkedHashMap也提供了有序的Map,其继承HashMap, 在此基础上用了一个双向链表来记录存入的先后顺序。


3.2 Set 主要介绍 HashSet/TreeSet

3.2.1 HashSet : 底层是用HashMap 来存储元素;

        3.2.2 TreeSet: 底层默认用TreeMap  来存储元素。


3.3 List 主要介绍 ArrayList/ LinkedList/vector.

        3.3.1 ArrayList: 底层是用数组来存储元素,特点是查询快,更新慢。(Note:其数组具有动态扩容功能,默认是原来的1.5倍)

        3.3.2 LinkedList: 底层是用双向链表来存储元素,特点更新快,查询慢。

        3.3.3 Vector: 底层是用数组来存储元素,与上面提到的ArrayList相似,主要的不同是Vector通过synchronized来保证其线称安全。

        3.1.4 Arrays.asList(): 此方法返回一个内部自定义的ArrayList,与上面提到的并不是一个类。其继承AbstractList,重写了set(int index, E element)方法,但没重写add/remove 方法,从而保证了数组的长度是不可变的。


3.4 Queue 将会在线程池系列介绍


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值