Java 最常见的 200+ 面试题及答案:集合

232 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

  • 个人简介:微信公众号关注:SteveCode。为您分享更多的知识学术。生于忧患死于安乐
  • 专注Java技术干货分享,Java基础技术、数据结构、相关工具、Spring全家桶、intellij idea......

文章面试题整理出自:Java 最常见的 200+ 面试题:面试必备_Java中文社群的博客-CSDN博客_java面试题

18.java 容器都有哪些?

Collection接口

List接口

ArrayList类

LinkList类

vector类

Set接口

HashSet类

TreeSet类

LindedHashSet类

Map接口

hashMap类

TreeMap类

19.Collection 和 Collections 有什么区别?

Collection集合接口,List、set接口的父接口

Collections包装类(工具类)里面好多都是静态方法。

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

List:有序可一重复,(按照插入的顺序)可以存入null

Set:无序不重复,(TreeSet可以解决重复)

Map:键值对的方式存取数据

21.HashMap 和 Hashtable 有什么区别?

线程安全方面:Hashtable线程安全,hashMap非线程安全。

存null:hashMap可以存null键和值,hashtable不能

效率方面:HashMap效率比Hashtable要高

*容量方面:hashMap :默认容量为16*0.75。扩容机制是2倍。

HashTable:默认容量为:11*0.75。扩容机制是:2倍+1

继承的接口不同:HashMap 继承 abstractMap

Hashtable继承 Dictionary

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

HashMap:插入删除定位元素,比较适合

TreeMap:集合有序的时使用

*23.说一下 HashMap 的实现原理?

是由hash算法来实现的,数据结构是:jdk1.7:数组+链表;jdk:数组+链表+红黑树。链表长度阈值达到8时,变为红黑树。我们通过put(key,value)存储,使用get(key)获取值。传入key的值,获取key.hashcode()计算出hash值。当计算出hash值相同时,我们称为hash冲突。

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

hashSet底层是由hashmap实现。hashset不允许重复。

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

结构上:数组 链表

增删查上:arraylist 查询快,删除插入相对慢。LinkedList删除插入比较快。查询相对慢了点。

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

数组转List:Arrays. asList()

Lsit转数组: List.toArray()

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

相同点:都是数组结构,

线程安全方面:arrayList不是线程安全,Vector是线程安全的。

默认容量:Array默认容量为10,扩容机制是0.5倍,vector默认容量为10扩容机制是1倍。

arrayLsit更节约内存空间,不考虑并发时,优先使用ArrayList

效率:ArrayList效率要高于vector

28.Array 和 ArrayList 有何区别?

一个是数组,一个是集合

容量:ArrayLsit会自动扩容,指定固定大小。

ArrayList内置的方法比较多

Array可以存基本类型与对象,ArrayList只能存对象。

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

queue是一个先进先出的一个容器,

相同点:都是删除第一条数据并返回

不同点:poll如果集合为null时,返回null。

remove()如果集合为空时,抛异常.NoSuchElementException

相同点:
 Queue<String> queue = new LinkedList<String>();
        queue. offer("string"); // add
        queue. offer("string2"); // add
        System. out. println(queue. poll());都是删除并返回string
//        System. out. println(queue. poll());
        System.out.println("-----");
        System. out. println(queue. remove());都是删除并返回string2
        System. out. println(queue. size());0
不同点:
Queue<String> queue = new LinkedList<String>();
queue. offer("string"); // add
queue. offer("string2"); // add
System. out. println(queue. poll());删除并返回string
System. out. println(queue. poll());删除并返回string2
System.out.println("-----");
System. out. println(queue. remove());抛异常:NoSuchElementException
System. out. println(queue. size());   

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

vector、HashTable、Stack

31.迭代器 Iterator 是什么?

迭代器是一种设计模式,是用来遍历集合的对象。

迭代器类与集合类都是成对增加的。

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

集合引用.iterator;获取一个对象

特点:中有不少方法例如:next()获取下一个元素、hasnext()集合中是否还有下一个元素、remove)()删除元素

33.Iterator 和 ListIterator 有什么区别?

Iterator 是 ListIterator 父类

相同点:都可以遍历集合,都是集合中提供的方法。

不同点:Listlterator只能遍历List集合,而lterator可以遍历任意集合

在lierator遍历中不能进行添加元素,在lterator中就没有提供add()这个方法。而在Listlterator中可以进行添加,里面还提供了不少方法。也可以实现对对象的修改(set())

也提供了逆向遍历的方法hasprevious和previous方法

Iterator 和 ListIterator 有什么区别?_银八三三的博客-CSDN博客_listiterator和iterator的区别

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

怎么确保一个集合不能被修改? - 程序员大本营

collections.unmodifiableMap(map)

Collections.unmodifiableList(List)

Collections.unmodifiableSet(Set)

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("");
List<String> list1 = Collections.unmodifiableList(list);
list1.add("22");
System.out.println(list);
输出:
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.Collections$UnmodifiableList.add(Collections.java:1314)
	at com.song.Myreverse.main(MyPublic.java:52)