JAVA 集合框架

[color=green][b]1. JAVA 集合框架的组成[/b][/color]
三部分: 接口,接口的实现类,算法类(工具类)
接口如:Collection,List,Map
实现类:ArrayList,LinkedList,HashMap等
算法类:Collections,Arrays

[img]http://lvp.iteye.com/upload/picture/pic/34339/f453eb02-a237-3b9c-9674-5dceddccfd9f.jpg[/img]

如上图所示
接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
左下角即为算法类.

在JAVA 集合中又主要分为这三种类型
Set和List集合接口(两者同属 Collection 接口下的 )和Map接口

Set(集) 接口类型:集合中的对象没有特定的方式排序,没有重复对象,但它的某些实现类能对集合中的对象按特定方式排序。

List(列表) 接口类型:是有序的Collection,集合中的对象按照索引位置排序,可以有重复对象,可以按对象在集合中的索引位置检索对象,与数组类似。

Map(映射) 接口类型:集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。它的有些实现类能够对集合中的键对象进行排序。

有趣的是Collection接口不提供随机访问元素的get()方法。因为Collection包括Set,而Set自己维护内部顺序。如果想检查Collection中的元素,那就必须使用迭代器。
而List接口中则出现了 get(int index)方法,其实现类 ArrayList和LinkedList也就实现了这个方法。

另外 Collection 接口的iterator() 和 toArray()方法都用于获得集合中的所有元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组.
Iterator接口隐藏底层集合的数据结构,向客户程序提供了遍历各种类型的集合的统一接口。hasNext()判断是否遍历完毕,next()返回下一个元素等等。

除了 Collection接口必备 iterator()方法外,List还提供了一个 listIterator()方法,返回了一个 ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些 add()之类的方法,可以添加,删除,向前或向后遍历。


2.ArrayList 和 LinkedList ,Vector

ArrayList 和 LinkedList 都实现了List接口.因此都实现了List接口中常用的方法,例如 add(),get()等等,但是 LinkedList 除了实现了这些方法外,本身也多出了几种方法,例如addFirst(),addLast(),removeFirst(),removeLast(),getFirst(),getLast()等等.

ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!

ArrayList 线程不安全 遍历查找元素快 删除和插入元素慢
LinkedList 线程不安全 遍历元素慢 删除和插入元素快
Vector 线程安全 同步 效率都很低 旧的集合框架

如果想让LinkedList 同步的话,保证线程安全,那么可以在创建List时候构造一个同步的List接口类型对象
List list = Collections.synchronizedList(new LinkedList());

总结
  1)如果涉及到堆栈,队列等操作,应该考虑用List。如果要进行大量的随机访问,应使用ArrayList;如果经常进行插入与删除操作,用使用LinkedList。

  2)HashMap设计用来快速访问;而TreeMap保持“键”始终处于排序状态,所以没有HashMap快。LinkedHashMap保持元素插入的顺序,但是也通过散列提供了快速访问能力。

  3)Set不接受重复元素。HashSet提供最快的查询速度,而TreeSet保持元素处于排序状态。LinkedHashSet以插入顺序保存元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值