集合

1,java中的集合体系?

  先描述集合的单双例,在从集合的顶层接口开始说起

  

  集合中框架的接口图

  //img-blog.csdn.net/20151214201612335

  集合中框架的类图

  //img-blog.csdn.net/20151214201619661

 

  集合中框架的遗留图

  这里写图片描述

  总体大图

  

 

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类,而HashMapJava1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(如果是ArrayListList lst = Collections.synchronizedList(new ArrayList());如果是HashMapMap map = Collections.synchronizedMap(new HashMap());)。

HashtableHashMap采用的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可多个值.

 

 

 

 

  

 

posted @ 2017-03-18 22:15  鹿小框  阅读(142)  评论(0编辑  收藏  举报