java集合常见的面试题

2023-12-14 00:34:06

java集合面试题

1,什么是集合:
集合就是一个存放数据的容器,准确的说,就是放数据对象引用容器
集合类存放的都是对象的引用,而不是对象的本身
集合类型主要有3种:set(集)、list(列表)和map(映射)。
2,集合的特点:
 ? 集合是用于存储对象的容器。
 ? ?和数组对比对象的大小不确定。因为集合是可变长度的。数组需要提前定义大小

3,集合和数组的区别:

数组是固定长度的,集合是可变长度的。
数组可以存储基本数据类型,也可以村粗引用数据类型。集合只能存储引用数据类型
数组存储的元素必须是同一数据类型,集合可以存储不同的数据类型 ? ?
4,Collection的接口包含哪些:
List 接口,Set接口
5,Map接口的实现类主要有:
HashMap,TreeMap,Hashtable,ConcurrentHashMap以及Properties等
6,Set接口的主要实现类:
HashSet,TreeSet,LinkedHashSet等
7,List接口实现类主要有:
ArrayList,LinkedList,Stack以及Vector等
8,List,Set,Map三者的区别?
java容器分为,Collection和Map两大类,Collection集合的子接口有 set,list,queue三种子接口。

Collection集合主要有List和set两大接口:

  • List:有序,元素可以重复,可以插入多个null值,元素都有索引。ArrayList,LinkedList,Vector
  • set:一个无序的容器,不可以存储重复元素,只允许存入一个null的值,必须保证元素的唯一性。
  • Map:是一个键值对集合,存储键,值和之间的映射关系。key无序,唯一;value,不要求有序,允许重复。
9,List
ArrayList ?  object数组
Vector ? ? ? Object数组
LinkedList ? 双向循环链表
10,那些集合类是线程安全的:
1,vector 比ArrayList多了一个同步化机制(线程安全)
2,Stack:栈,也是线程安全的,继承于Vector
3,Hashtable :比Hashmap多了个线程安全
4,ConcurrentHashMap:是一种高效但是线程安全的集合 ? ?
11,怎么能确保一个集合不被修改:
使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变
集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。
 ? ?

12,迭代器iterator是什么:

iteratoe接口提供遍历任何接口的Collection的接口。我们可以从一个collection中使用迭代器方法来获取迭代器实例。
13,iterator怎么使用,又什么特点:
Iterator it = list.iterator();
 ? ? ? ?while (it.hasNext()){
 ? ? ? ? ? ?System.out.println(it.next());
 ? ? ?  }
?
iterator的特点只能是单向遍历,但是更加安全。
?
next() 方法获的集合的下一个元素
hasNext() 检查集合中是否还有元素
remove() ?方法将迭代器新返回的元素删除
14,iterator和Listlterator有什么区别:
1,Listilterator 继承iterator
2,Listiterator 比iterator多方法
add(E e) 将指定的元素插入列表,插入位置为迭代器当前位置之前
set(E e) ?迭代器返回的最后一个元素替换参数e 
nextIndex() ?迭代器当前位置,返回下一个元素的下标 
3,使用范围不同,terator可以迭代所有集合;ListIterator 只能用于List及其子类 ? ?

15,说一些ArrayList的优缺点:
Arraylist底层是以数组实现,是一种随机访问模式。实现了RandomAccess接口,查找速度非常快。
 ? ?ArrayList在添加一个元素的时候非常方便
缺点:

 ? ?删除元素的时候,需要做一次元素复制操作。如果复制的元素很多,就会耗费性能。
 ? ?插入元素的时候,也要做一次元素复制操作。
 ? ?
16,如何实现数组和list之间的转换:
数组转 List:使用 Arrays. asList(array) 进行转换。
 ? ?
int[] arr = {1,2,3};
 ? ?List<int[]> list = Arrays.asList(arr);
List 转数组:使用 List 自带的 toArray() 方法。
 ? ?
 List list ?= new ArrayList();
 ? ?Object[] objects = list.toArray();
17,ArrayList 和 LinkedList 的区别是什么?
1,数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实
现。
2,随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数
据存储方式,所以需要移动指针从前往后依次查找。
3,ArrayList 增删操作要影响数组内的其他数据的下标。
4,内存占用:LinkedList 比 ArrayList 更占内存,因为 LinkedList 的节点除了存储数据,还存储
了两个引用,一个指向前一个元素,一个指向后一个元素。
5,LinkedList 的双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向。
18,ArrayList 和 Vector 的区别是什么?
1,都实现了 List接口,(List 接口继承了 Collection 接口),他们都是有序集合。
2,线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非
线程安全的。
3,性能:ArrayList 在性能方面要优于 Vector。
4,ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次
会增加 1 倍,而 ArrayList 只会增加 50%(1/2)
5,不需要保证线程安全的时候,使用ArrayList。
19,插入数据时,ArrayList、LinkedList、Vector谁速度较快?
arayList和Vector 底层的实现都是使用数组方式存储数据。Vector 中的方法由于加了 synchronized 修饰,因此 Vector 是线程安全容器,但性能上较ArrayList差。LinkedList 使用双向链表实现存储,所以 LinkedList 插入速度较快。

20,队列和栈是什么,有什么区别?
1,队列先进先出,栈先进后出。
2,遍历数据速度不同。
 ? ?栈只能从头部取数据 也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性。
 ? ?队列则不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间。

21,HashMap和HashSet的区别
HashMap:
 ? ?实现了Map接口
 ? ?存储键值对
 ? ?调用put() 添加元素
 ? ?HashMap使用key计算HashCode
 ? ?HashMap比HashSet快

HashSet:
    实现了set接口
 ? ? 存储对象
 ? ? 调用add()添加元素
 ? ? ?HashSet使用 成员对象计算,hashCode值,对于两个对象来说,hashCOde可         能相同。
 ? ? ?HashSet比HashMap慢

22.HashMap和Hashtable有什么区别
1,HashMap是线程安全的,HashTable是线程不安全的
2,HashMap种允许键和值为null,HashTable不允许。
3,HashMap默认容器是16 为2倍扩容,HashTable默认是11,为2倍+1扩容

23,Colloection he Collections 有什么区别
1,COllection是最基本的集合接口,COllection派生两个子接口,list和set,分别定义了两种不同的存储方式。
2,Collections是一个包装类,它包含各种有关集合操作的静态方法(对集合的搜索,排序,线程安全化等) ? ?

在Queue中,poll() 和 remove() 有什么区别:
1,offer()和add()区别:
 ? ?增加新项时,如果队列满了,add会抛出异常,offer返回false
2,poll()和remove()区别:
 ? ?poll()和remove()都是从队列中删除第一个元素,remove抛出异常,poll返回      null。
3,peek()和element()区别:
 ? ?peek()和element()用于查询队列头部元素,为空时element抛出异常,peek      返回null

文章来源:https://blog.csdn.net/weixin_64502989/article/details/134984165
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。