Java容器简介

l 概念分类

Java 2 将容器分为两个不同的概念 : Collection Map

Collection: 提供对一组各自独立的元素的集合, List Set 接口都继承自 Collection 接口。

Map :提供了一组 key-value( 键值对 )

 

两种类型的主要区别在于 :

Collection 类型每个位置只持有一个元素 (Object), 比如 List 以加入到容器中的先后顺序来持有一个独立的的对象。 Set 中的对象不得重复,并且它会使用自己内部的一种排序机制。

Map 类型所持有的是 key-value( 键值对 ) Map 不接受重复的 key

 

l 容器分类

Java 的所有容器类都实现了来自于 List, Set, Map 三种接口中的一个。我们可以通过Think in Java里面的类图来观察他们之间的关系:  

 

 

 

 

 

 

l List

List 定义了一个线性表接口, Java2 中的 List 实现方式分为两种:

ArrayList 是以 array( 数组 ) 实现的线性表数据结构,其 get(int index) 方法的时间复杂度为 O(1) 。而其插入与删除操作的元素在中央时,其效率较低。因为每次都要对插入或删除位置 (index) 后面的 array 的进行数组拷贝。

LinkedList 是一个双向链表数据结构。其插入与删除操作效率要明显高于 ArrayList

而且其随机查找的时间复杂度为 O(n) ( 其实每次随机查找的次数要依赖于 size/2 到要查找的目标 index 之间的个数 ) 其查找的效率要低于 ArrayList O(1)

 

l Set

Set 是集合类,该集合不能有“重复”对象存在, Java2 Set 实现方式分成两种:

HashSet 将持有对象映射到在哈希表中。   (JDK1.6 的内部实现是 HashSet 只是个适配器,其将适配对象 HashMap 适配成了 Set 接口 )

TreeSet 将持有对象放入 RBTree (红黑树)中。 (TreeSet 也将适配对象 TreeMap 适配成了 Set 接口 )

 

l   Map

Map 是一组 key-value( 键值对 ) 集合,其中的 key( ) 不能重复。

HashMap   key 对象生成 hashcode 然后映射到 Entry<K,V>[] 数组中 (JDK1.6 中其 hashtable 默认大小为 16 ,在持有对象数量查过默认大小之后就会重新生成一个更大 HashTable ,然后将原有持有的对象逐个散列到新哈希表中 ) 。其 get(Object key) 最佳时间复杂度为 O(1) ,最坏则为 O(n) 。但就查找的平均效率来说是要高于 TreeMap

TreeMap   key 对象为关键值存放在 RBTree (红黑树)中。其 get(Object key) 方法的平均时间复杂度为 O(logn)

 

l Iterator

Iterator 迭代器实现对 : 哈希表 HashMap ,红黑树 TreeMap ,链表 LinkedList ,动态数组 ArrayList 等数据结构的迭

代。所有的 Collection 都可以获得一个 Iterator 对象用来遍历自己的所持有的对象。

 

 

 

--------------------------------------------------------------------------------------------------
我们的淘客网开通啦,欢迎大家去逛逛 ~\( ≧▽≦ )/~ 啦啦啦 ~~~
淘宝购物资讯网: http://taoke178.jimdo.com

淘乐园: http://taoleyuan.jimdo.com

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值