JAVA 集合框架

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

 

如上图所示 
接口: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、付费专栏及课程。

余额充值