JAVA中的LIST、MAP、SET

三者的简单区别:

1. set是一个无序的集合,不能包含重复的元素

2. list:是一个有序的集合可以包含重复的元素,提供了按索引访问的方式。

3. map:包含了key-value对,map中key必须唯一,value可以重复。

 

LIST的分类

1. ArrayList:类似与数组,基于动态数组结构,一旦数据存储好了,查询操作效率会比较高

2. LinkedList:类似与链表,因此能够快速的增、删除。

3. Vector:类似于ArrayList,也具有查询效率高的有点,但是Vector是多线程安全的,因此效率会略低于ArrayList。可以设置增长因子

4. Stack:Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop 方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

注:List是一个接口,而ArrayList是List接口的一个实现类。

 

MAP的分类:

Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。

Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

1. Hashtable

   继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。

   Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。

2. HashMap

   和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。

3. LinkedHashMap是HashMap的一个子类,比HashMap多了一个链表的结构,保持了插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。

4. TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的

5. WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

 

集合:

List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。

HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。

LinkedHashSet:HashSet的一个子类,一个链表。

TreeSet:SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。
1. Set实现的基础是Map(HashMap);
2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象

 

posted @ 2017-08-03 11:29  yunpengli  阅读(116)  评论(0)    收藏  举报