集合类总结

集合框架是一个统一的架构,用来表示和操作集合。主要由接口、抽象类是实现类所构成。
这里写图片描述

Collection 接口常用的方法
(1)boolean add(E e) 确保此Collection包含指定的元素。如果此Collection由于调用而发生更改,则返回true,如果此Collection不允许有重复元素,并且已经包含了指定的元素,则返回false。支持此操作的collection可以限制哪些元素能添加到此collection中来。
(2)boolean remove(Object o)
从此Collection中移除指定元素的单个实例(如果存在的话)
(3)boolean contains(Object o)
如果此Collection 包含指定的元素,则返回true
(4)int size()返回此collection中的元素数
(5)Object[] toArray()
返回包含此Collection 中所有元素的数组
(6)Iterator itarator()返回在此Collection的元素上进行迭代的迭代器

集合中框架的实现类
List:List所代表的是有序的Collection,它用特定的插入顺序来维护元素顺序,提供了按索引访问的方式,是一个有序的集合,因此可以包含重复的元素。实现LIst接口的集合主要有:ArrayList、LinkedList、Vector、Stack
(1)ArrayList是一个动态数组,是最常用的集合。允许任何符合规则的的元素插入。每一个ArrayLIst都有一个初始容量(10),随着元素的不断增加,容器的大小也会随着增加。每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行容量扩充。但过多的扩充操作会浪费时间、效率
(2)LinkedList是一个双向链表,是采用双向循环链表实现的.利用LinkedList实现栈(stack),队列(queue),双向队列(double-ended queue)它除了有ArrayList的基本操作方法外还额外提供了get,remove,insert方法在LinkedList的首部或尾部。
(3)Vector: 与ArrayList相似,但是Vector是同步的,存取元素效率低。所以说Vector是线程安全的动态数组。它的操作与ArrayList几乎一样。
(4) Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop 方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置

ArrayList VS LiskedList
(1)ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表完成,其内每个对象除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素.
(2)对于随机访问的get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针
(3)对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据
Set:Set是一种不包括重复元素的Collection。由于Set接口的特殊性,所有传入Set集合中的玄素都必须不同。实现了Set接口的集合有HashSet、TreeSet
(1)HashSet实现了Set接口中的hashtable,依靠HashMap来实现。应该为要存放到哈希列表中的各个对象定义hashCode()和equals()。因为实现了set接口所以不能有重复的元素 HashSet堪称查询速度最快的集合,因为其内部是以HashCode来实现的。它内部元素的顺序是由哈希码来决定的,所以它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。
(2)TreeSet是依靠treeMap来实现的。TreeSet是一个有序集合,元素按照升序排列,意味着TreeSet中元素要实现Comparable接口。

Map
Map存储的是key-value对,不能包含重复的key,可以有重复的value。实现map的有:HashMap、TreeMap、HashTable、Properties、EnumMap。
(1)HashMap
HashMap是实现了Map接口的Hash表。HashSet底层就是HashMap的实现。通过put(Object key,Object value)来放置元素,通过get(Object key)来获取值。Hash表通过键计算出相对于的存储位置的值
(2)TreeMap
键以某种排序规则排序,内部以red-black tree(红黑树)数据结构实现,实现了sortedMap接口
(3)HashTable
HashMap VS TreeMap
1、HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。HashMap中元素的排列顺序是不固定的)。

2、HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。集合框架”提供两种常规的Map实现:HashMap和TreeMap (TreeMap实现SortedMap接口)。

3、在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。使用HashMap要求添加的键类明确定义了hashCode()和 equals()的实现。 这个TreeMap没有调优选项,因为该树总处于平衡状态。
HashTable VS HashTable
1、历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 。
2、同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
3、值:只有HashMap可以让你将空值作为一个表的条目的key或value 。
Queue
队列,它主要分为两大类,一类是阻塞式队列,队列满了以后再插入元素则会抛出异常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue。另一种队列则是双端队列,支持在头、尾两端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。

对集合的选择
(1)对List的选择
1、对于随机查询与迭代遍历操作,数组比所有的容器都要快。所以在随机访问中一般使用ArrayList
2、LinkedList使用双向链表对元素的增加和删除提供了非常好的支持,而ArrayList执行增加和删除元素需要进行元素位移。
3、对于Vector而已,我们一般都是避免使用 4、将ArrayList当做首选,毕竟对于集合元素而已我们都是进行遍历,只有当程序的性能因为List的频繁插入和删除而降低时,再考虑LinkedList。
(2)对Set的选择
1、HashSet由于使用HashCode实现,所以在某种程度上来说它的性能永远比TreeSet要好,尤其是进行增加和查找操作。
2、虽然TreeSet没有HashSet性能好,但是由于它可以维持元素的排序,所以它还是存在用武之地的。
(3)对Map的选择
1、HashMap与HashSet同样,支持快速查询。虽然HashTable速度的速度也不慢,但是在HashMap面前还是稍微慢了些,所以HashMap在查询方面可以取代HashTable。
2、由于TreeMap需要维持内部元素的顺序,所以它通常要比HashMap和HashTable慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值