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中集合框架

猜你喜欢

转载自blog.csdn.net/Blue92120/article/details/125426768