本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- 个人简介:微信公众号关注: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)