问题: Map、Set、List、Queue、Stack的特点与用法
答案:
Map
· Map是键值对,键Key是唯一不能重复的,一个键对应一个值,值可以重复。
· TreeMap可以保证顺序。
· HashMap不保证顺序,即为无序的。
· Map中可以将Key和Value单独抽取出来,其中KeySet()方法可以将所有的keys抽取正一个Set。而Values()方法可以将map中所有的values抽取成一个集合。
Set
· 不包含重复元素的集合,set中最多包含一个null元素。
· 只能用Lterator实现单项遍历,Set中没有同步方法。
List
· 有序的可重复集合。
· 可以在任意位置增加删除元素。
· 用Iterator实现单向遍历,也可用ListIterator实现双向遍历。
Queue
· Queue遵从先进先出原则。
· 使用时尽量避免add()和remove()方法,而是使用offer()来添加元素,使用poll()来移除元素,它的优点是可以通过返回值来判断是否成功。
· LinkedList实现了Queue接口。
· Queue通常不允许插入null元素。
Stack
· Stack遵从后进先出原则。
· Stack继承自Vector。
· 它通过五个操作对类Vector进行扩展,允许将向量视为堆栈,它提供了通常的push和pop操作,以及取堆栈顶点的peek()方法、测试堆栈是否为空的empty方法等。
用法
· 如果涉及堆栈,队列等操作,建议使用List。
· 对于快速插入和删除元素的,建议使用LinkedList。
· 如果需要快速随机访问元素的,建议使用ArrayList。
更为精炼的总结
Collection 是对象集合, Collection 有两个子接口 List 和 Set
List 可以通过下标 (1,2..) 来取得值,值可以重复。 Set 只能通过游标来取值,并且值是不能重复的。
ArrayList , Vector , LinkedList 是 List 的实现类
· ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的。
· LinkedList 是线程不安全的,底层是由链表实现的。
Map 是键值对集合
· HashTable 和 HashMap 是 Map 的实现类。
· HashTable 是线程安全的,不能存储 null 值。
· HashMap 不是线程安全的,可以存储 null 值。
Stack类:继承自Vector,实现一个后进先出的栈。提供了几个基本方法,push、pop、peak、empty、search等。
Queue接口:提供了几个基本方法,offer、poll、peek等。已知实现类有LinkedList、PriorityQueue等。