面试题整理----Java容器---上接Java基础

Posted xianghebuyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题整理----Java容器---上接Java基础相关的知识,希望对你有一定的参考价值。

18.java 容器都有哪些?

数组,String,java.util下的集合容器(conllection和map)

19.Collection 和 Collections 有什么区别?

collection是Java的集合,conllections相当于一个工具类,用来操作Java的Conllection

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

List接口和Set接口属于Collection接口,Map接口和Collection接口并列存在(同级)

list元素可重复,有序性;set无序且唯一;map采用键值对存储元素且key唯一

补充:数组和集合的区别----同一个数组只能存储同一类型数据,同一集合可以存储不同类型数据

21.HashMap 和 Hashtable 有什么区别?

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口

HashMap是支持null键和null值的,而HashTable在遇到null时,会抛出NullPointerException异常。

我们说HashTable是同步的,HashMap不是,也就是说HashTable在多线程使用的情况下,不需要做额外的同步,而HashMap则不行。即HashTable是线程安全的,hashmap则不是

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

TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排列的;TreeMap的实现也是基于红黑树结构。
而HashMap<K,V>的Key值实现散列hashCode(),分布是散列的均匀的,不支持排序,数据结构主要是桶(数组),链表或红黑树。
所以,查询的时候使用HashMap,增加、快速创建的时候使用TreeMap

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

HashMap是基于Hash算法实现的,
我们通过put(key,value)存储数据,通过get(key)来获取数据
当传入key时,HashMap会根据Key.hashCode()计算出Hash值,根据Hash值将value保存在bucket里 ,。
当计算出相同的Hash值时,我们称之为Hash冲突,HashMap 的做法是用链表和红黑树存储相同Hash值的value,
当hash冲突的个数比较少时,使用链表存储,
否则使用红黑树。

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

HashSet是基于HashMap实现的,HashSet 底层使用HashMap来保存所有元素,
因此HashSet 的实现比较简单,相关HashSet 的操作,基本上都是直接调用底层HashMap的相关方法来完成,HashSet不允许有重复的值,并且元素是无序的。

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

ArrayList的实现是基于数组,LinkedList的实现是基于双向链表;

对于随机访问,ArrayList优于LinkedList;

对于插入和删除操作,LinkedList优于ArrayList;

LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

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

List转数组:toArray方法

数组转List:Arrays的asList(a)方法,也可以循环遍历

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

Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。  
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间

28.Array 和 ArrayList 有何区别?

Array类型的变量在声明的同时必须进行实例化(至少得初始化数组的大小),而ArrayList可以只是先声明。

Array只能存储同构的对象,而ArrayList可以存储异构的对象

Array是始终是连续存放的,而ArrayList的存放不一定连续

Array对象的初始化必须只定指定大小,且创建后的数组大小是固定的,而ArrayList的大小可以动态指定,其大小可以在初始化时指定,也可以不指定,也就是说该对象的空间可以任意增加。

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

remove() ,如果队列为空的时候,则会抛出异常

而poll()只会返回null

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

Vector

Stack

Hashtable

java.util.concurrent包下所有的集合类

31.迭代器 Iterator 是什么?

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,

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

(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。   (2) 使用next()获得序列中的下一个元素。   (3) 使用hasNext()检查序列中是否还有元素。   (4) 使用remove()将迭代器新返回的元素删除。

33补充Java基础---break和continue的区别

break是结束全部循环,continue是跳出本次循环执行下次循环

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

我们可以采用Collections包下的unmodifiableMap方法,通过这个方法返回的map,是不可以修改的。他会报 java.lang.UnsupportedOperationException错。 同理:Collections包也提供了对list和set集合的方法。
Collections.unmodifiableList(List)
Collections.unmodifiableSet(Set)

以上是关于面试题整理----Java容器---上接Java基础的主要内容,如果未能解决你的问题,请参考以下文章

2022Android面试题合集最新整理版,移动开发架构师筑基必备

史上最全Java面试题整理(附参考答案)

Java面试题整理《集合篇》

Java面试题整理《集合篇》

近5年常考Java面试题及答案整理

5年大厂Java高频面试题及答案整理