仅供参考,如有误,欢迎随时在评论区指出呀!!
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异常。
后期会继续更新哦~~