1.常见的集合有哪些:
Map接口和Collection接口是所有集合框架的父接口
List接口的实现类主要有:ArrayList、LinkedList、Vector、Stack(Vector的子类)等
Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet(HashSet的子类)等
Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
2.List、Set和Map接口的特点
1)Set表示数学意义上的集合概念,所以其主要特点是集合中的元素不能重复,存储时无序
2)List称为有序的collection。它按对象进入的顺序保存对象,同时,它可以保存重复的对象
3)Map用于保存键值对,其中value可以重复,但键不能重复
3.ArrayList、Vector和LinkedList的联系和区别?
ArrayList和Vector都是基于存储元素的Obeject[] array来实现的,它们会在内存中开辟一块连续的空间来存储,
由于数据存储时连续的,所以支持用下标来访问元素,索引数据的速度比较快。
但是在插入元素时需要移动容器中的元素,因此对数据的插入操作执行得较慢
区别:1)同步性:ArrayList的方法都是不同步的,而Vector的绝大多数方法(如add、insert、remove、set、equals、hashcode等)
都是直接或间接同步的,所以Vector是线程安全的,ArrayList不是线程安全的(正是由于Vector提供了线程安全的机制,其性能上要稍逊于ArrayList)
2)扩容大小:Vector默认扩充为原来的2倍(每次扩充空间的大小是可以设置的),ArrayList默认扩充为原来的1.5倍(没有提供方法来设置空间扩充的大小)
LinkedList是采用双向列表来实现的,对数据的索引需要从列表头开始遍历,因此随机访问效率较低,但是插入元素不需要对
数据进行移动,因此插入效率较高。同时,它是非线程安全的容器
扩展:当增删操作在末尾来操作(remove()和add()方法),此时ArrayList不需要移动数组元素,所以效率比LinkedList要高
当对数据的操作主要为指定位置的插入或删除时,使用LinkedList效率比较高
4.HashMap、HashTable的区别
1)HashMap没有考虑同步,是线程不安全的;Hashtable使用了synchronized关键字,是线程安全的
2)HashMap允许null作为Key和Value;HashTable key和value都不能为null
3)HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
4)hash值的使用不同,HashTable直接使用对象的hashCode,HashMap重新计算hash值
5)hash数组默认大小不同,HashMap中,hash数组的默认大小时16,扩容时增加为原来的2倍,HashTable中默认大小是11,增加
方式为原来的2倍加1.
6)遍历方式不同。Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式
5.HashMap是如何实现key唯一的
在HashMap的put方法实现中首先利用了hash()生成key的hashCode,生成一个hash值h1,如果这个h1在HashMap中不存在,那么直接将<key,value>添加
到HashMap中;如果这个值已经存在,那就会找出来HashMap中所有hash值为h1的key,然后分别调用key的equals()方法判断当前谈价的key值是否与
已经存在的key值相同,如果equals()方法返回true,HashMap会使用新的value值来覆盖掉旧的value值,如果equals()方法返回false,说明新增加的key
在HashMap中不存在,因此会在HashMap中创建新的映射关系
哈希冲突:不同的key值有相同的hash值
6.Java中HashMap的key值要是为类对象则该类需要满足什么条件?
需要同时重写该类的hashCode()方法和它的equals()方法
7.如何实现HashMap的同步
可以通过Map m=Collections.synchronizedMap(new HashMap())来达到同步的效果
8.Collection和Collections的区别
1)Collection是一个集合接口,继承它的接口为List和Set
2)Collections是针对集合类的一个包装类,提供了一系列的静态方法实现对集合的搜索、查找、同步等操作