2020-12-29

Java集合常见面试题汇总

1. 写出 List、Set、Map的各自特点
List接口:
存储任意类型的Object对象,有序、有下标、元素可以重复;
下标范围:0~元素个数-1 0~size()-1
Set集合:
无序、无下标、元素内容不允许重复;
Map集合:
(1) Map以键值对形式存储(key-value)。
(2) 键:无序、无下标、元素不允许重复(唯一)。
(3) 值:无序、无下标、元素内容允许重复。

2. 写出 ArrayList 和 Vector的区别
a. ArrayList:
底层以数组实现,查询效率快,增删效率慢
JDK1.2版本,线程不安全,并发效率相对高
b. Vector:
底层以数组实现,查询效率快,增删效率慢
JDK1.0 版本,线程安全,并发效率低

3. 写出 ArrayList 和 LinkedList的区别
a. ArrayList:
底层以数组实现,查询效率快,增删效率慢
JDK1.2版本,线程不安全,并发效率相对高
b LinkedList:
底层以链表实现,查询效率相对较低,增删效率相对快

   扩充:数组在内存空间连续:内存空间利用率相对不高 (寻址方便)
     链表在内存空间不连续:内存空间利用相对较高 (寻址相对麻烦)

4. 写出 HashSet如何保证元素内容不重复
I. 如果保证HashSet中存储内容不同的对象,需要做到以下两点:
a. 覆盖 hashCode方法
原则:必须保证内容相同的对象返回相同的哈希码值;
为了提高效率,尽可能做到内容不同的对象返回不同哈希码值
覆盖:将所有的属性值拼凑为一个 int 的整数作为返回值返回
b. 覆盖 equals方法
① 必须保证内容相同返回 true,拒绝添加元素
② 内容不同的对象返回值为false,则成功添加
II. 执行原理:当一个对象往 HashSet集合中存储时,先调用当前对象的
hashCode方法,获取对应存储下标(为了保证内容相同的对象不添加
到HashSet集合中,通常将 hashCode方法给与覆盖),存储下标位置
上没有任何元素,则直接将对象存储在对应下标位置上,但是如果下标
位置上已经存储了其他元素,则调用 该对象 equals方法(为了保证
内容不同通常覆盖 equals方法),equals方法返回值为true,代表
内容相同对象,则拒绝添加到集合中,如果返回值为false,则成功添
加到对应下标位置,此时采用数组+链表形式进行存储。

5. 写出 HashMap 和 Hashtable 的区别
(1) HashMap:
JDK1.2版本,线程不安全,并发效率快,允许null作为
key/value
(2) Hashtable:
JDK1.0版本,线程安全,并发效率低,不允许null作为
key/value

6. 简述 HashMap的存储原理
HashMap: 存储元素时获取key的哈希码值(通过键对应对象的hashCode方法),
获取哈希码值与底层存储时数组取余得到存储下标,第一种情况存储
下标上没有元素,则直接添加(将key和value一起存储);第二种情
况,存储下标位置上如果有元素,则调用key对应存储对象的equals
方法,判断下标冲突的对象内容是否相同,equals方法结果为true,
代表内容相同,则拒绝添加,equals方法结果为false,代表内容不
同,此时采用数组+链表形式进行存储

HashMap应用注意细节: 如果自定类型的对象作为HashMap的键进行存储,为了
保证元素内容不重复,需要覆盖 hashCode和equals方法(规则等价于
HashSet);但是实际开发应用,通常使用 Integer、String作为
HashMap的key类型

注意:HashSet底层实际封装了一个 HashMap

7. 简述 Comparator 和 Comparable的区别

Comparator是外置比较器,实现方法 compare(Tt1,T t2);
Comparable是内置比较器,实现方法 compareTo(Tt)方法;
8. 简述 Java中集合框架
2020-12-29_第1张图片

你可能感兴趣的:(#,笔记,java,hashmap,链表)