java常见面试题及自己整理的答案(二)

1.java 容器都有哪些?
大的方面分为Collection与Map。
Collection下有List、Set、Queue。
常用集合有ArrayList、LinkedList、HashMap、TreeSet等等。

2.Collection 和 Collections 有什么区别?
java.util.Collection是一个接口,它提供了对集合对象基本操作的通用接口方法。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections是一个包装类,仅包含静态的集合操作方法。

3.List、Set、Map 之间的区别是什么?
List集合有序,可重复
Set无序、不可重复
Map为键值对,键不可重复。

4.HashMap 和 Hashtable 有什么区别?
HashMap线程不安全、执行速度快,null可为key值
HashTable线程安全,内部方法使用了synchronized关键字, null不能为key
ConcurrentHashMap线程安全,使用分段锁实现,多线程推荐使用。

5如何决定使用 HashMap 还是 TreeMap?
TreeMap是按照字母顺序排序的,HashMap没有,如果要排序就用TreeMap,如果不用排序就用HashMap,因为它快。

6说一下 HashMap 的实现原理?
hashmap通过计算hash值,若没用hash碰撞直接存储在数组中,发生hash碰撞先存储在单向链表(时间复杂度为O(n))中,若链表长度超过8个以后,会将链表转为红黑树(时间复杂度为O(lgN))。

7说一下 HashSet 的实现原理?
HashSet底层由HashMap实现
HashSet的值存放于HashMap的key上
HashMap的value统一为PRESENT

8ArrayList 和 LinkedList 的区别是什么?
ArrayList无序,LinkedList有序
ArrayList的查询效率高,LinkedList删除、插入效率高。

9如何实现数组和 List 之间的转换?
数组转list:
1.for循环
2.Arrays.asList(arrays)
list转数组:
1.for循环
2toArray()方法

10ArrayList 和 Vector 的区别是什么?
ArrayList查询速度快、线程不安全,扩容为newCapacity=oldCapacity+(oldCapacity>>1),容量为原始容量的1.5倍。
Vector线程安全, newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);扩展后默认为原来的2倍。

11.Array 和 ArrayList 有何区别?
ArrayList底层使用数组。不同的是ArrayList会自动扩容。如果可以确定长度使用数组,不能就使用ArrayList

12在 Queue 中 poll()和 remove()有什么区别?
两者都是删除队列的的第一个元素
remove()方法如果队列为空的话,会报异常
poll()方法,若队列为空,返回null

13哪些集合类是线程安全的?
HashTable、ConcurrentHashMap、Vector、Stack、CopyOnWriteArrayList、CopyOnWriteArraySet

14迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

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

16Iterator 和 ListIterator 有什么区别?
Iterator只能向前,listiterator可前可后, ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

17怎么确保一个集合不能被修改?
jdk提供的方法:Collections.unmodifiableList(list);
Collections.unmodifiableSet(Set)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值