Collection和map的区别

Collection:
1、Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。
  一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。
  Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
2、所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数和有一个Collection参数的构造函数
  其中无参数的构造函数用于创建一个空的Collection;有一个Collection参数的构造函数用于创建一个新的Collection。
List接口:
1、List是有序的Collection,使用此接口能准确的锁定每个元素的位置,可以通过索引访问List中的元素,类似于java数组。
2、List中是允许存在相同的元素的。
3、List除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator()接口,
  和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。
4、实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。
Set接口:
1、Set就一种不包含重复元素的Collection,即任意的两个元素都不相等,Set最多有一个null元素。


继承Map的类有HashMap,HashTable
Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对,即。


Map:
1、Map对象中,每一个关键字最多有一个关联的值。
2、不能包括两个相同的键,一个键最多能绑定一个值。null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
3、当get()方法返回null值时,即可以表示Map中没有该键,也可以表示该键所对应的值为null。
  因此,在Map中不能由get()方法来判断Map中是否存在某个键,而应该用containsKey()方法来判断。
4、Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
HashTable:
1、Dictionary的子类,缺省是线程同步的。不允许关键字或值为null
2、实现一个Key-value映射的哈希表。任何非空的对象都可以作为key或者value
HashMap:
1、Map的实现类,缺省情况下是非同步的,可以通过Map Collections.synchronizedMap(Map m)来达到线程同步
2、允许null,即null value和null key。
当元素的顺序很重要时选用TreeMap,当元素不必以特定的顺序进行存储时,使用HashMap。
Hashtable的使用不被推荐,因为HashMap提供了所有类似的功能,并且速度更快。
当你需要在多线程环境下使用时,HashMap也可以转换为同步的。


如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
尽量返回接口而非实际的类型,如返回List而非 ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

你可能感兴趣的:(Collection和map的区别)