集合
1,java中的集合体系?
先描述集合的单双例,在从集合的顶层接口开始说起
集合中框架的接口图
集合中框架的类图
集合中框架的遗留图
总体大图
2,Set和List的异同?
set:是无序唯一的,不可以有重复的值,可以包含null;
List:是有序的,可以有重复的值,有null;
3,HashSet和TreeSet排序的区别?
HashSet如何保证元素的唯一性?
重写hashcode和equals方法,如果hashcode的值相同,判断equals;如果值不同,则不判断equals.
TreeSet的排序方式?
有两种方法:
一种是自然排序,元素实现comparable接口,
另一种是比较器排序,构造方法接收comparator实现类对象
4,ArrayList,Vector和LinkedList的区别?
ArrayList:底层是数组,查询快.增删慢,线程不安全,效率高.
Vector:底层是数组,查询快,增删慢,线程安全,效率低.
LinkedList:底层是链表,查询慢,增删快.线程不安全,效率高.
本质区别:
Arraylist和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,他们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据块而插入数据慢,Vector由于使用了Synchronized方法(线程安全),通常性能上Arraylist差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前后或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度比较快
5,Hashtable与HashMap的区别?
Hashtable是线程安全的,不可以有NULL值和NULL键
HashMap是线程不安全的,可以有NULL值和NULL键
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(如果是ArrayList:List lst = Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
线程安不安全的原因如下:
JAVA API对HashMap的介绍 *注意,此实现不是同步的。如果多个线程同时访问此映射,而其中至少一个线程从结构上修改了该映射,则它必须 保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的不同步访问,如下所示:
Map m = Collections.synchronizedMap(new HashMap(…));*
6,Collection和Collections的区别?
Collection是集合类的上级接口,继承与他的接口主要有Set和List
Collections是针对集合类的一个帮助类,他提供一系列的静态方法实现对各种集合的搜索,排序,线程安全化等操作.
7,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?有何区别?
Set里的元素是不能重复的,用iterator()来区分重复与否,equals()是判断两个Set是否相等
equals()和==方法决定引用值是否指向同一对象,equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相匹配的话,返回真值.
8,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但是可以被重载OverLoading.
9,List,Map,Set三个接口,存取元素时,各有什么特点?
list以特定的次序来持有元素,可以有重复元素,
set不能有重复元素,属于内部排序.
Map保存key-value,value可多个值.