java面试题:集合总结

1.集合与数组

数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。

集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。

2.几种重要的接口和类简介

1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

2、Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

对比如下:

3.ArrayList、LinkedList、Vector的区别 

  • Arraylist和Vector是采用动态数组的数据结构,LinkedList基于链表的数据结构
  • 对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。
  • 对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。
  • Vector使用了synchronized方法-线程安全,性能上比ArrayList差一点
  • ArrayList数组的起始容量是10.当数组需要增长时,新容量=(旧容量*3)/2+1,也就是说每一次容量大概会增长50%。
  • Vector数组的起始容量是10,可以自定义初始容量,新容量=新容量+旧容量
     

4.HashTable与HashMap的区别

1.同步性:Hashtable是线程安全的,可以用于多线程中,而HashMap是线程序不安全的,只能用于单线程中。

2.HashMap的key和value可以为空,HashTable的不可以为空。

5.HashMap与TreeMap

1、HashMap是通过hashcode()对其内容进行快速查找的;HashMap中的元素是没有顺序的;

    TreeMap中所有的元素都是有某一固定顺序的,如果需要得到一个有序的结果,就应该使用TreeMap;

2、HashMap和TreeMap都不是线程安全的;

扫描二维码关注公众号,回复: 11451406 查看本文章

3、HashMap继承AbstractMap类;覆盖了hashcode() 和equals() 方法,以确保两个相等的映射返回相同的哈希值;

     TreeMap继承SortedMap类;他保持键的有序顺序;

4、HashMap:基于hash表实现的;使用HashMap要求添加的键类明确定义了hashcode() 和equals() (可以重写该方法);为了优化HashMap的空间使用,可以调优初始容量和负载因子;

     TreeMap:基于红黑树实现的;TreeMap就没有调优选项,因为红黑树总是处于平衡的状态;

5、HashMap:适用于Map插入,删除,定位元素;

     TreeMap:适用于按自然顺序或自定义顺序遍历键(key);
 

总结的不全,还需要补充

猜你喜欢

转载自blog.csdn.net/niuxikun/article/details/105130637