集合知识点总结
1. 数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢?
答:数组没有length()方法,有length属性;字符串有length()方法;集合没有length()方法,有size()方法。
2. 简述一下List集合的子类特点
答:ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
3. Collection和Collections的区别?
答:A:Collection 是单列集合的顶层接口,有子接口List和Set
B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等。
4. Hashtable和HashMap的区别?
Hashtable:线程安全,效率低。不允许null键和null值
HashMap:线程不安全,效率高。允许null键和null值
5. List,Set,Map等接口是否都继承于Map接口?
List,Set不是继承自Map接口,它们继承自Collection接口
Map接口本身就是一个顶层接口
6. 数组和集合的区别?
A:长度区别
数组的长度固定
集合长度可变
B:内容不同
数组存储的是同一种类型的元素
而集合可以存储不同类型的元素
C:元素的数据类型问题
数组可以存储基本数据类型,也可以存储引用数据类型
集合只能存储引用类型
7. Interator是什么?
答:迭代器,一种集合的遍历方式,依靠集合而存在。
8. 什么是泛型?有什么好处?
答:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
好处:
A:把运行时期的问题提前到了编译期间
B:避免了强制类型转换
C:优化了程序设计,解决了黄色警告线问题,让程序更安全
9. Set集合是怎么保证唯一性的?
答:底层依靠hashCode()和equals()两个方法。
11. 谈谈你对LinkedHashSet集合的理解
答:LinkedHashSet:底层数据结构由哈希表和链表组成。
哈希表保证元素的唯一性。
链表保证元素有序。(存储和取出是一致)
12. Map集合和Collection集合的区别?
答:Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。可以把这个理解为:夫妻对
Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。可以把这个理解为:光棍(11.11)
13. List、Map、Set三个接口存取元素时,各有什么特点?
答:List集合存取单列元素,有序、可重复。
Set集合存取单列元素,无序,不可重复(唯一)。
Map集合存取键值对元素,键不可重复,值可重复。
14. TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
答:TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小。TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序。Collections工具类的sort方法有两种重载的形式,第一种要求传入的待排序容器中存放的对象比较实现Comparable接口以实现元素的比较;第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator接口的子类型(需要重写compare方法实现元素的比较),相当于一个临时定义的排序规则,其实就是通过接口注入比较元素大小的算法,也是对回调模式的应用(Java中对函数式编程的支持)。
15. 在Hashtable上下文中,同步指的是什么?
答:同步意味着在一个时间点只能有一个线程可以修改hash表,任何线程在执行Hashtable的更新操作前都需要获取对象锁,其他线程则等待锁的释放。
16. 如何实现HashMap的同步?
答:HashMap可以通过Map m = Collections.synchronizedMap(new HashMap())来达到同步的效果。具体而言,该方法返回一个同步的Map,该Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。