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)方法添加已经存在的对象,则会覆盖前面的对象
浙公网安备 33010602011771号