Java集合框架

Java集合框架

转载于:冰湖一角 https://www.cnblogs.com/bingyimeiling/p/10255037.html
集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,支持多线程的集合类位于java.util.concurrent(JUC)包下。
数组元素既可以是基本类型的值,也可以是对象;集合只能保存对象。
Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系。(Map不是Collection的子接口)

接口特性
List有序可重复集合,可直接根据元素的索引来访问
Set无序不可重复集合,只能根据元素本身来访问
Queue队列集合
Map存储key-value对的集合,可根据元素的key来访问value

Java集合常见接口及实现类

1.Collection接口常见方法(Java API)

在这里插入图片描述

2.Set集合

Set执行添加已经存在的元素时,会操作失败,add()方法返回false。
主要实现类:
实现类特点
HashSet不能保证元素的顺序, 不是线程同步
LinkedHashSet相比于HashSet,使用链表维护元素的次序,元素的顺序与添加顺序一致
TreeSet保证元素处于排序状态,采用红黑树的数据结构来存储集合元素,排序方法有自然排序和定制排序
EnumSet集合元素有序,不允许添加null值

3.List集合

List集合代表一个有序、可重复集合,集合中每个元素都有其对应的顺序索引。List集合默认按照元素的添加顺序设置元素的索引,可以通过索引(类似数组的下标)来访问指定位置的集合元素。

实现类特点
ArrayList动态数组,每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作
LinkedList内部以链表的形式保存集合中的元素,实现了Deque接口,可当作双端队列来使用
Vector与ArrayList相似,是线程安全的动态数组
StackStack继承自Vector,实现一个后进先出的堆栈,有基本的push和pop 方法,还有peek方法

ArrayList和LinkedList的区别:
LinkedList的实现机制与ArrayList的实现机制完全不同,ArrayLiat内部以数组的形式保存集合的元素,所以随机访问集合元素有较好的性能;LinkedList内部以链表的形式保存集合中的元素,所以随机访问集合中的元素性能较差,但在插入删除元素时有较好的性能。

4.Map集合

Map接口采用键值对Map<K,V>的存储方式,保存具有映射关系的数据,因此,Map集合里保存两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value可以是任意引用类型的数据。key值不允许重复,可以为null。如果添加key-value对时Map中已经有重复的key,则新添加的value会覆盖该key原来对应的value。常用实现类有HashMap、LinkedHashMap、TreeMap等。
HashMap与Hashtable是Map接口的两个典型实现,它们之间的关系完全类似于ArrayList与Vertor。HashTable是一个古老的Map实现类,它提供的方法比较繁琐,目前基本不用了
 ♦ HashMap是线程不安全,HashTable是线程安全的。

♦ HashMap可以使用null值最为key或value;Hashtable不允许使用null值作为key和value,如果把null放进HashTable中,将会发生空指针异常。

实现类特点
HashMap通过put()和get()方法存储和获取对象
LinkedHashMap使用双向链表来维护key-value对的次序
Properties一个key、value都是String类型的Map,主要用于读取配置文件
TreeMap一个红黑树的数据结构,每个key-value对作为红黑树的一个节点,存储时需要根据key对节点进行排序

各Map性能分析:
♦ HashMap通常比Hashtable(古老的线程安全的集合)要快

♦ TreeMap通常比HashMap、Hashtable要慢,因为TreeMap底层采用红黑树来管理key-value。

♦ LinkedHashMap比HashMap慢一点,因为它需要维护链表来爆出key-value的插入顺序。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值