Java集合框架详解

集合详解

Java集合类主要由两个根接口Collection和Map派生出来的。

Collection派生出了三个子接口: List,Set,Queue

Map是Key-Value键值对集合,根据元素的Key访问Value

所以,java集合可大致分为四类,List,Set,Queue,Map

List篇

List常用实现类有Arraylist,LinkedList,Vector
特点 :
集合中的元素允许重复
集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序
集合中的元素可以通过索引来访问或者设置

Arraylist : 动态数组,允许任何符合规则的元素插入包括null,初始大小为10,每次插入都会检查容量,快溢出时,自动扩容 , 擅长随机访问 , 非同步,线程不安全,查询快,增删慢
LinkedList : 链表数据结构 , 同时继承了deque接口,还可以当队列使用,线程不安全 ,查询慢,增删快
Vector : 与Arraylist操作基本一致,区别于Vector线程安全,效率低

Set篇

Set常用的实现类有HashSet、LinkedHashSet、TreeSet
特点 : 无序不重复

HashSet : 使用哈希表实现 , 元素无序且唯一,元素唯一性是依靠重写hashcode与equals方法来实现的,如果不重写则无法保证数据的唯一性,线程不安全,效率高,可以存储null值
LinkedHashSet : 有序,使用链表和哈希表共同实现,链表保证了元素的存储顺序是插入顺序 , 哈希表保证了数据的唯一性
TreeSet : 使用二叉树实现的 , 元素唯一且排序 , 同样需要重写hashcode和equals方法,二叉树结构保证了元素的有序性 , 排序分自然排序(存储元素实现comparable接口)与定制排序 (创建treeset时,传入一个自己实现的Comparator对象),正常情况下不允许有null值,重写comparable接口就可以了

Queue篇

队列是数据结构比较重要的一种类型,支持FIFO(first input first output先进先出),尾部添加,又不删除,类似与日常中的排队

Deque
deque接口是Queue接口的子接口,他代表一个双端队列,当程序中需要使用"“栈”"这种数据结构时,推荐使用ArrayDeque

PriorityQueue
PriorityQueue保存队列元素的顺序并不是按照加入的顺序,而是按照队列元素的大小进行排序,不允许插入null元素

Map篇

常用实现类 :HashMap,Hashtable,LinkedHashMap,TreeMap
特点 : 保存了具有映射关系的数据 , 保存着两组数据都可以使用任何类型 , 但Key不能重复

HashMap : 根据键的hash值存储数据,访问速度快,遍历顺序不确定,现成不安全,key最多只能一个存一个null值,Value可存储多个null值,可以使用collection的synchronizedMap来帮助其实现线程安全,或者替换使用ConcurrentHashMap来实现线程安全
Hashtable : 线程安全,key-value都不允许存储null值,不建议使用,不需要线程安全时使用hashmap,需要线程安全会时,可以替换使用ConcurrentHashMap
LinkedHashMap : 继承了hashmap ,是map接口的链表和哈希表实现,链表保证了遍历顺序与插入顺序一致
TreeMap : TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是键的升序排序,也可以指定排序的比较器,当用迭代器遍历TreeMap时,得到的记录是排序过后的数据

Map总结

实现类数据结构是否线程安全Key是否可为null是否有序
hashMap数组+链表+红黑树
hashtable数组+链表
TreeMap红黑树
LinkedHashMap数组+链表+红黑树+双向链表
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值