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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!