JAVA容器模块相关面试题

仅供参考,如有误,欢迎随时在评论区指出呀!!

Java容器都有哪些?

答:Java容器分为Collection和Map两大类,其下又有很多的子项。
如:Collection下的List(ArrayList linkedList)、Set(HashSet、TreeSet)
Map主要有HashMap、TreeMap、HashTable等。

Collection和Collections有什么区别?

答:Collection是一个集合接口,他提供了对集合对象进行基本操作的通用接口方法,所有集合都是他的子类,比如list和set等。
Collections是一个包装类,包含了很多的静态方法,不能被实例化,就像一个工具类,提供的方法有:Collections.sort(list)等。

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

答:三者的区别主要在于元素是否有序和是否允许元素重复两方面。
List是有序并且允许存储重复元素的集合,主要由动态数组和双向链表来实现。可被克隆和序列化。
Set是不可允许存放重复元素的,但他的子类linkedHashSet允许存储有序元素,其他的子类都是存放无序元素的。
Map存储的是键值对,键不允许存放重复元素和null,value值是可以存重复元素和null值的。

HashMap和HashTable有什么区别?

答:HashMap允许key和Value可为Null值,而HashTable是不允许的。
HashMap是线程安全的,HashTable是非线程安全的。
注意: 单线程条件下推荐使用HashMap,多线程下使用ConcurrentHashMap.

如何决定是使用HasMap还是使用TreeMap?

答:需要进行插入、删除和查找元素时,推荐使用HashMap;
当需要对key值进行有序排列时推荐使用TreeMap

HashMap的实现原理

答:HashMap是基于Hash算法来实现的,通过put(key,value)来存储值,get(key)来获取相应的值。存值时,HashMap会根据key.hashCode()计算出对应的hash值,再根据此值将value值存入对应的bucket中。
注意: 如果计算出来的hash值已存在(key值重复)时,使用链表(重复值较少时使用)或红黑树(重复值多时使用)来存储value值。

HashSet的实现原理

答:HashSet基于HashMap实现,底层就是使用HashMap的方法来存储元素,对HashSet 的一些相关操作也是调用HashMap的方法来实现的。
注意: HashSet是不允许存储重复的值的。

ArrayList和LinkedList的区别是什么?

答:ArrayList是动态数组实现的,LinkedLIst是双向链表实现的。
Arraylist查询(随机访问)效率高,LinkedList的增删速度快。
注意: 需要频繁读取元素时使用ArrayList。需要多次增删元素时使用LinkedList。

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

答:数组转为List:使用Arrays.aslist(array)方法实现;
list转为数组:使用list自带的toArray()方法来实现。

ArrayList和Vector有什么区别?

答:Vector 通过Synchronized实现线程同步,故是线程安全的,而ArrayList是非线程安全的。ArrayList的性能比Vector的高,Vector扩容一次是增加一倍,而ArrayList一次是增加50%。

Array与ArrayList有何区别?

答:Array可存储基本数据类型和引用数据类型,ArrayList只可以存储引用类型数据。
Array在创建时就固定了大小,每次增删元素都创建新的对象来保存;ArrayList则会自动扩容或缩容。

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

答:两个均是返回第一个元素,并且把返回的元素删除。如果没有找到对应的元素,poll()会返回null,而remove()则会直接抛出NosuchElementExcception异常。

迭代器Iterator是什么?

答:Iterator接口提供遍历任何Collection的接口,可以在Collection中使用迭代器方法来获取迭代器的实例。并且迭代器允许在迭代的过程中删除元素。

Iterator和listIterator有什么区别?

答:Iterator可以遍历Set和List集合,而ListIterator只可以遍历List;
Iterator遍历是单向遍历,而ListIterator遍历是可以双向遍历的;
LiatIterator继承于Iterator,在原基础上增加了添加、替换和获取元素位置等功能。

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

答:将该集合设置为只可读集合,就无法在对集合进行修改。通过Collections.unmodifiable collection(collection c)方法可以设置;当试图修改只读集合时会抛出UnsupportedOperationException异常。

后期会继续更新哦~~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值