吊打面试官!Java集合/泛型 24 道题,你能答对多少?

Java集合/泛型面试题

1、ArrayLi st和1 inkedList的区别
2、HashMap和HashT able的区别
3、Collecti on包结构,与Collecti ons的区别
4、泛型常用特点(待补充)
5、说说List, Set, Map三者的区别
6、Arr ay与ArrayList有什么不一样?
7、Map有什么特点
8、集合类存放于Java. util 包中,主要有几种接口
9、什么是1ist接口
10、说说ArrayList (数组)
11、Vector (数组实现、线程同步)
12、说说LinkList (链表)
13、什么Set集合
14、HashSet ( Hash 表)
15、什么是TreeSet (二又树)
16、说说LinlkHashSet ( HashSet+Li ruke aHashMap)
17、HashMap (数组+链表+红黑树)
18、说说Concur entHashMlap
19、HashTable (线程安全)
20、Trellap (可排序)
21、LinHashMap (记录插入顺序)
22、泛型类
23、类型通配符?
24、类型擦除

吊打面试官!Java集合/泛型 24 道题,你能答对多少?_第1张图片

1、ArrayList和linkedList的区别

Array(数组)是基于索引index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。
Array获取数据的时间复杂度是0(1 ),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据,(因为删除数据以后,需要把后面所有的数据前移)
缺点:数组初始化必须指定初始化的长度否则报错
例如:

int[] a = new int[4];//推荐使用int[]这种方式初始化
int c[] = {23,43, 56,78};//长度: 4,索引范围: [0,3]

List-是一一个有序的集合,可以包含重复的元素, 提供了按索引访问的方式,它继承Collection.
List有两个重要的实现类: ArrayList和LinkedList
ArrayList可以看作是能够自动增长容量的数组
ArrayList的toArray方法返回一-个数组
ArrayList的asList方法返回- -个列表
ArrayList底层的实现是Array,数组扩容实现
LinkList是一一个双链表在添加和删除元素时具有比ArrayList更好的性能但在get与set方面弱于
ArrayLlist.当然这些对比都是指数据量很大或者操作很频繁。

2、HashMap和HashTable的区别

1.两者父类不同
HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable (可复制)、Serializable (可序列化)这三个接口。

2.对外提供的接口不同
Hashtable比HashMap多提供了elments()和contains(两个方法。
elments()方法继承自Hashtable的父类Dictionnary. elements() 方法用于返回此Hashtable中的value的枚举。
contains0方法判断该Hashtable是否包含传入的value.它的作用与containsValue()-致.事实上,contansValue0就只是调用了一下contains0 方法。

3.对null的支持不同
Hashtable : key和value都不能为null.
HashMap : key可以为null ,但是这样的key只能有一个,因为必须保证key的唯-一性;可以有多个key值对应的value为null.

4.安全性不同
HashMap是线程不安全的,在多线程并发的环境下,可能会产生死锁等问题,因此需要开发人员自己处理多线程的安全问题。
Hashtable是线程安全的,它的每个方法上都有synchronized关键字,因此可直接用于多线程中。
虽然HashMap是线程不安全的,但是它的效率远远高于Hashtable ,这样设计是合理的,因为大部分的使用场景都是单线程。当需要多线程操作的时候可以使用线程安全的ConcurrentHashMap.
ConcurrentHashMap.虽然也是线程安全的,但是它的效率比Hashtable要高好多倍。因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定。

5、初始容量大小和每次扩充容量大小不同

6、计算hash值的方法不同

3. Collection包结构 ,与Collections的区别

Collection是集合类的上级接口,子接口有Set. List. LinkedList. ArrayLlist. Vector. Stack. Set ;
Colletions是集合类的一个帮助类,它包含有各种有关集合操作的静态多态方法,用于实现对各种集合的搜索、排序.线程安全化等操作。此类不能实例化,就像一 个工具类,服务于Java的Collection框架。

4、泛型常用特点(待补充)

泛型是ava SE 1.5之后的特性,《Java 核心技术》中对泛型的定义是:
“泛型“意味着编写的代码可以被不同类型的对象所重用。
“泛型”,顾名思义,“泛指的类型”。我们提供了泛指的概念, 但具体执行的时候却可以有具体的规则来约束,比如我们用的非常多的ArrayList就是个泛型类, ArrayLit作为集合可以存放各种元素,如Integer, String ,自定义的各种类型等,但在我们使用的时候通过具体的规则来约束,如我们可以约束集合中只存放Integer类型的元素,如

List iniData = new ArrayList<()

使用泛型的好处?
以集合来举例,使用泛型的好处是我们不必因为添加元索类型的不同而定义不同类型的集合,如整型集
合类,浮点型集合类,字符串集合类,我们可以定义-一个集合来存放整型、浮点型,字符串型数据,而
这并不是最重要的,因为我们只要把底层存储设置了0bject即可,添加的数据全部都可向上转型为
Object。更重要的是我们可以通过规则按照自己的想法控制存储的数据类型。

5.说说List,Set,Map三者的区别

List对付顺序的好帮手) : List接口存储-组不唯- - (可以有多个元索引用相同的对象) , 有序的对象Set注重独一无二的性质)不允许重复的集合。不会有多个元索引用相同的对象。
Map(用Key来搜索的专):使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。

6、Array与ArrayList有什么不一 样?

Array与ArrayLis都是用来存储数据的集合。ArrayList底层是使用数组实现的 ,但是arrayList对数组进行了封装和功能扩展, 拥有许多原生数组没有的一些功能。我们可以理解成ArrayList是Array的一 个升级版。

吊打面试官!Java集合/泛型 24 道题,你能答对多少?_第2张图片

以上的面试题都已整理成册,可以关注我的公众号《老男孩的架构路》领取一线大厂Java面试题总结+各知识点学习思维导图+一份400页pdf文档的Java独家面试手册!

这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。

你可能感兴趣的:(Java(面试+技术干货))