【面试题】Java集合

以下回答均为个人的一些理解和看法,本人才疏学浅,如有错误,恳请指出。

1.java 容器都有哪些?

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Collection 和 Collections 有什么区别?

Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有ListSet

Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

3.List、Set、Map 之间的区别是什么?

List:元素有序、可重复的集合
Set:元素无序、不可重复的集合
Map:双列数据,保存具有映射关系“key-value”键值对的集合

4.HashMap 和 HashTable 有什么区别?

HashTable是线程安全的。
HashTable不允许keyvaluenull

5.如何决定使用 HashMap 还是 TreeMap?

当集合存储大量无序对象时,使用HashMap
当集合存储对象需要排序有序时,使用TreeMap

6.说一下 HashMap 的实现原理?

在这里插入图片描述

7.说一下 HashSet 的实现原理?

Set中为什么要重写hashCode和equals?
在这里插入图片描述

8.ArrayList 和 LinkedList 的区别是什么?

ArrayList对应数据结构中的顺序表
其底层是一个数组。
由于顺序表的特点,随机访问方便,时间复杂度为O(1),但增加和删除复杂度较高。

LinkedList对应数据结构中的链表。其底层是一个双向链表。增加和删除方便,只需修改指针(索引)即可。但查找时需遍历,单链表需从头遍历,时间复杂度O(n),故引入双向链表牺牲一部分指针(引用)域,来增加效率。

9.如何实现数组和 List 之间的转换?

/**
 * 数组转换为ArrayList
 * 注意:ArrayList中只能存对象
 * java.util.Arrays.ArrayList下有一个ArrayList子类,不能直接强转类型。
 * asList方法返回的是一个List,所以可以通过两步来将它转换成java.util.ArrayList的类型。
 */
public ArrayList arrToList(Integer [] arr) {
    return new ArrayList(Arrays.asList(arr));
}

/**
*ArrayList转换为数组
*/
public Object[] listToArr(ArrayList list){
   return list.toArray();
}

10.ArrayList 和 Vector 的区别是什么?

Vector是同步的,而ArrayList不是。然而,如果寻求在遍历的时候对列表进行改变,应该使用CopyOnWriteArrayList
ArrayListVector快,它因为有同步,不会过载。
ArrayList更加通用,Collections工具类轻易地获取同步列表和只读列表。

11.Array 和 ArrayList 有何区别?

Array可以容纳基本类型和对象,而ArrayList只能容纳对象。
Array是指定大小后不可变的,而ArrayList大小是可变的。
Array没有提供ArrayList那么多功能,比如addAllremoveAlliterator等。

12.在 Queue 中 poll()和 remove()有什么区别?

poll() remove() 都是从队列中取出一个元素。
poll() 在获取元素失败的时候会返回空。
remove() 失败的时候会抛出异常。

13.哪些集合类是线程安全的?

VectorHashTableEnumerationStatck

14.迭代器 Iterator 是什么?

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Iterator 仅用于遍历集合,Iterator本身并不提供承装对象的能力。
如果需要创建Iterator 对象,则必须有一个被迭代的集合。
集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。

15.Iterator 怎么使用?有什么特点?

terator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iteratornext()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。 
IteratorJava迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

16.Iterator 和 ListIterator 有什么区别?

Iterator可用来遍历SetList集合,但是ListIterator只能用来遍历List
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
ListIterator 实现了 Iterator 接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

17.怎么确保一个集合不能被修改?

使用如下方法创建集合
Collections. unmodifiableCollection(Collection c)
Arrays.asList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值