java集合常见面试题

一、 Array和ArrayList的区别,何时更合适用Arrayjava

a)      Array是数组,能够容纳基本类型和对象,而ArrayList是集合,只能容纳对象数组

b)      Array是指定大小的,而ArrayList的大小是动态的安全

c)      Array没有提供ArrayList那么多功能,好比addAll、removeAll和iterator等,数据结构

d)      适合用Array的状况异步

                 i.          若是列表的大小已经指定,大部分状况下是储存和遍历他们工具

                ii.          对于遍历基本数据类型,尽管Collections使用自动装箱来减轻编码任务,在指定大小的基本类型的列表上ArrayList的工做也会变得很慢性能

               iii.          若是你须要使用多维数组,使用[ ][ ]比List<List<>>更简单测试

二、 ArrayList和Vector的区别编码

1)      Vector是线程同步的,全部它也是线程安全的,而ArrayList是线程异步的,是不安全的。若是不考虑到线程的安全因数,通常用ArrayList效率比较高。线程

2)      若是集合中的元素数目大于目前集合数组的长度时,vector增加率为目前数组长度的100%,而ArrayList增加率为目前数组长度的50%。在数据量变化比较大的状况下,用vector有必定优点

三、 ArrayList和LinkedList的区别

a)      ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构

b)      对于随机访问get和set,ArryList要优于LinkedList,由于LinkedList要移动指针

c)      对于新增和删除操做add和remove,linkedList比较占优点,由于ArrayList要移动数据。这一点要看实际状况,若是只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但批量随机插入,则考虑LinkedList。由于ArrayList每插入一条数据,要移动插入点及以后的全部数据。

四、 Lsit、set和map的区别

a)      List (实现了collection接口)

                 i.          能够容许有重复的对象

                ii.          能够插入多个null元素

               iii.          是一个有序容器,保持了每一个元素的插入顺序

b)      Set(实现了collection接口)

                 i.          不容许重复对象

                ii.          无序的容器,没法保证每一个元素的储存顺序;而TreeSet能够经过Comparator或Comparable进行顺序排序

               iii.          只容许一个null元素

               iv.          LinkedHashSet按照元素的插入顺序对它们进行存储

c)      Map(不是collection的子接口或实现类。Map是一个接口)

                 i.          Map是以键值对的存储方式存放数据,key是惟一的,value能够重复

                ii.          Map中能够有多个null值,但只能有一个null键

               iii.          TreeMap也能够经过comparator或者comparable维护排序顺序

五、 HashMap和HashTable的区别

a)      Hashtable是线程安全的,同步的;而hashMap是线程不安全不一样步的

b)      HashMap容许存在一个null的key,多个null的value;而hashtable的key和value都不容许为null

六、 HashMap和TreeMap的区别

a)      HashMap经过hashcode对其内容进行快速查找,而TreeMap中全部的元素都保持着某种固定的顺序,若是你须要获得一个有序的结果,你就应该使用TreeMap(HashMap中元素排列是无序的)

b)      在Map中插入、删除和定位元素,HashMap的最好的选择,但若是您须要按天然顺序或自定义顺序遍历Map,那么就使用TreeMap。使用HashMap要求做为key的类中明确重写了hashCode()和equals()方法。

(两个map中的元素同样,但顺序不同,会致使hashCode()不同:

       测试:

       在hashMap中,一样的值的map,顺序不一样,equals时为false;

       在treeMap中,一样的值的map,顺序不一样,equals时为true,说明treeMap在equals()时是整理了顺序的。

七、 Set里的元素是不能重复,那么用什么方法来区分重复与否呢?是用==仍是用equals()?

a)      Set里的元素是不能重复的,用equals()方法来区分重复与否;

b)      ==:

                 i.          判断基本类型时,比较的是 值 是否相同

                ii.          引用类型时,比较的是地址是否相同

c)      Equals:

                 i.          只能判断引用类型,默认状况下比较的是地址,能够进行重写,比较的是:对象的成员变量值是否相同

八、 Collection和Collections的区别:

a)      Java..util.Collection是一个接口(集合顶级接口)。它提供了对集合对象进行基本操做的通用接口方法。Collection接口在java类库中有不少集合的实现,其直接继承collection接口有List和Set

b)      Collections则是集合类的一个工具类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索及线程安全等操做。

九、 说出ArrayList、linkedList的存储性能和特性

a)      ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,优势是索引读取快,从最后插入和删除元素速度快,可是头部插入和删除速度慢

b)      LinkedList使用双向循环链表方式存储数据,因此头尾插入或读取的速度快,而中部插入速度慢

十、         Enumeration和iterator接口的区别

a)      Enumeration接口做用与iterator接口类似,但只提供了遍历vector和hashTable类型集合元素的功能,不支持元素的移除操做

b)      Enumeration速度是iterator的2倍,同时占用更少的内存。可是,iterator远比enumeration安全,由于其余线程不可以修改正在被iterator遍历的集合里面的对象。同时,iterator容许调用者删除底层集合里面的元素。

十一、         Listiterator有什么特色,与iterator区别

a)      Iterator是ListIterator的父类接口

b)      Iterator是单列集合(Collection)公共取出容器中元素的方式,而ListIterator是List集合的特有取出元素方式

c)      Iterator中具有的功能只有hashNext(),next(),remove();Listiterator中具有着对被遍历的元素进行增删查改的方法,能够对元素进行逆向遍历。

十二、         Java中HashMap的key值要是为类对象,则该类须要知足什么条件?

a)      须要重写equals()和hashCode()方法

1三、         ArrayList集合加入1万条数据,应该怎么提升效率?

a)      直接初始化ArrayList集合的初始化容量为1万。但达到100万以上乃至1000万以上时,初始化容量方法效率会降低

相关文章
相关标签/搜索