Java集合框架的总结_List、Set、Vector、Stack

List和Set
二者最明显的差别是List支持放入重复的对象,而Set不支持。
List
常用的实现类有ArrayList、LinkedList、Vector及Stack
1.ArrayList
●ArrayList是基于数组方式实现的,没有容量的限制。
●ArrayList在执行插入元素时可能要扩容,在删除元素时并不会减小数组的容量(如希望相应

的缩小数组容量,可以
调用ArrayList的trimToSize()方法),在查找元素时要遍历数组,对于非null的元素采取

equals的方式寻找;
●ArrayList是非线程安全的

2.LinkedList
●LinkedList是基于双向链表机制实现的
●LinkedList在插入元素时,须创建一个Entry对象,并切换相应元素的前后元素的引用;在查

找元素时,
须遍历链表;在删除元素时,须遍历链表,找到要删除的元素,然后从链表上将此元素删除即

可。
●LinkedList是非线程安全的
●相较ArrayList,LinkedList在插入和删除时效率较高,但查找效率较低。

3.Vector
对于Vector而言,要注意的只有一点:
Vector是基于synchronized实现的线程安全的ArrayList,但在插入时容量扩充的机制和

ArrayList有所不同,并可通过capacityIncrement来控制容量的扩充。

4.Stack
Stack继承自Vector,在其基础上实现了Stack所要求的后进先出(LIFO)的弹出及压入操作,其

提供了push、pop、peek三个主要方法。
●push
push操作是通过调用Vector的addElement来完成的。
●pop
pop操作通过调用peek来获取元素,并同时删除数组的最后一个元素
●peek
peek操作通过获取当前Object数组的大小,并获取数组上的最后一个元素。

Set
1.HashSet
HashSet是Set接口的实现,Set和List最明显的区别在于Set不允许元素重复,而List允许。
Set为了做到不允许元素重复,采用提基于HashMap来实现。
在HashSet的构造方法中创建了一个HashMap对象。
add(E)
 调用HashMap的put(Object,Object)方法来完成此操作,将需要增加的元素作为Map中的key,

value则传入一个之前
已创建的Object对象。

remove(E)
   调用HashMap的remove(E)方法来完成此操作
  
 contains()
    调用HashMap的containsKey(E)方法来完成此操作
 
iterator()
  通过Hash的KeySet的iterator方法来完成此操作
  HashSet不支持通过get(int)获取指定位置的元素,只能自行通过iterator方法来获取
 注意要点:
 对HashSet而言,最注意的有以下几点
 ●HashSet基于HashMap实现,无容量限制
 ●HashSet是非线程安全的
 
 2.TreeSet
 TreeSet与HashSet的主要不同在于对于排序的支持,TreeSet基于TreeMap实现。
 TreeSet和HashSet一样,也是完全基于Map来完成的,并且同样不支持get(int)来获取指定位

置的元素,只是TreeSet基于的是TreeMap,除了这些基本的Set实现外,TreeSet还提供了一些

排序方面的支持,例如传入Comparator实现、 
 descendingSet及descendingIterator等。
 对于TreeSet而言,最要注意的有以下几点:
 ●TreeSet是基于TreeMap实现,支持排序
 ●TreeSet是非线程安全的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值