java集合的体系结构
List、Set、Map是这个集合体系中最主要的三个接口。
其中List和Set继承自Collection接口。
Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能
重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序
1、Collection、Set和List的区别
Collection对象之间没有指定的顺序,允许有重复元素和多个null元素对象;它是Set和List接口的父类,是一种最通用型的集合接口;
Set各个元素对象之间没有指定的顺序,不允许有重复元素,最多允许有一个null元素对象;
List各个元素对象之间有指定的顺序,允许重复元素和多个null元素对象;
2.LinkedList,ArrayList,Vector区别?
1)LinkedList链式访问,以指针相连,适合于在链表中间需要频繁进行插入和删除操作。
2)ArrayList类似数组的形式,按照序号存储,随机访问速度非常快。
3)Vector向量按照各元素序号存储,数组大小可以动态增长,对于大容量数据存储效率较高。
这些类的对比与选择:
对于需要快速插入删除元素,应该使用Linkedlist
如果需要快速随机访问元素,应该选用Arraylist
如果程序在单线程环境中,选用非同步类Linkedlist、Arraylist
如果在多线程中,选用同步类vecto及其子类。
3、ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?
Vector和HashTable是线程同步的(synchronized)。
性能上,ArrayList和HashMap分别比Vector和Hashtable要好。
List 是有序的
4、HashMap,HashTable,TreeMap,WeakHashMap的区别?ConcurrentHashMap区别?
HashTable:
(1)是一个包含单向链的二维数组,table数组中是Entry存储,entry对象;
(2)放入的value不能为空;
(3)线程安全的,所有方法均用synchronized修饰;
(4)枷锁是锁整个hash表;
HashMap:
(1)相当于HashTable的升级版本;
(2)可以放入空值;
(3)基于hash表实现;
(4)按插入的顺序存储;
(5)线程不安全;
TreeMap :
(1)基于红黑树实现;
(2)是有序的存储;
(3)自己可以定义排序器;
ConcurrentHashMap:
(1)放入的value不能为空;
(2)线程安全的;
(3)当多线程对ConcurrentHashMap 操作时,不是完全锁住map, 而是锁住相应的
segment,并发高于hashtable;
(4)遍历性能低于hashMap;
WeakHashMap:
(1)HashMap的增强类,当key被回收时,可自动删除对应key的那条记录;
(2)其它同HashMap
Comparable接口与Comparator接口主要区别
1、前者是强行对是实现它的每个类的对象进行整体排序,此类被称为该类的自然排序,类的compareTo方法被称为它的自然比较方法,实现此接口的对象列表和(数组)可以通过Collections.sort()或者Arrays.sort()进行自动排序。
2、Comparator位于包Java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
示例:
Comparable接口