Java集合/泛型面试题1

1.ArrayList和likeList的区别

Array(数组)是基于索引(index)的数据结构,它使用索引在数据组中搜索和读取数据是很快的。

Array获取数据的时间复杂度是O(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方面弱于ArrayList.
当然,这些对比都是指数据量很大或者操作很频繁。

2.HashMap和HashTable的区别?

1)两者父类不同

HashMap是继承AstracMap类,而HashTable是继承Dictionary类。不过他们都实现了同时实现了map,Cloneable,Serializable这三个接口

2)对外提供接口不同

HashTable比HashMap多了两个方法elments()和contains()两个方法。

elments()方法继承HashTable的父类Dictionary。elments方法用于返回此HashTable中的value的枚举。

contains()方法判断该HashTable是否传入vaule。它的作用与containsVaule()一致,事实上,containsVaule()就只是调用了contains()方法

3)对null的支持不同

Hashtable:key和vaule都不能为null。

HashMap:key可以为null,但是这样的key只能有一个,因为必须保证key的唯一性,可以有多个key的vaule为null。

4)安全性不同

HashMap是线程不安全的,在多线程并发环境下,可能会产生死锁等问题,因此需要开发人员自己处理多线程的安全问题。

HashTable是线程安全的,他的每个方法都有synchronized关键字,因此可以直接用于多线程中。

虽然HashMap不是线程安全的,但他的效率远远高于HashTable,这样的设计是合理的,因为大部分使用场景都是单线程。当然需要使用多线程操作的时候可以使用线程安全的ConcurrentHashMap。

ConcurrentHashMap虽然也是线程安全的,但他的效率要比HashTable高好多倍。因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定。

5)初步容量大小和每次扩充容大小不同

6)计算hash值的方法不同

3.Collection包结构,与Conllections的区别?

Collection是集合类的上级接口,子接口有Set,List,LikedList,ArrayList,Vector,Stack;

Collections是集合的帮助类,它包含有各种有关集合操作的静态多态方法;用于实现对各种集合的搜索,排序,线程安全化等操作。此类不能实例化,就像一个工具类,服务于java的Collection框架。

4.泛型常用点(待补充)

泛型是javaSE1.5之后的特性,《java核心技术》中对泛型的定义是:

“泛型”意味着编写代码可以被不同的对象所重用.

“泛型”,顾名思义,“泛指的类型”。我们提供了泛指的概念,但具体执行的时候却可以有具体的规则来约束,比如我们用的非常多的ArrayList就是个泛型类,ArrayList作为集合可以存放各种元素,如Integer, String,自定义的各种类型等,但在我们使用的时候通过具体的规则来约束,如我们可以约束集合中只存放Integer类型的元素,如
List<Integer> iniData = new ArrayList<>()

使用泛型的好处?

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



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

List(对付顺序的好帮手): List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象

Set(注重独一无二的性质):不允许重复的集合。不会有多个元素引用相同的对象。


Map(用Key来搜索的专): 使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。

6.Array与ArraysList有什么不一样?

Array与ArrayList都是用来存储数据的集合。ArrayList底层是使用数组实现的,但是arrayList对数组进行了封装和功能扩展,拥有许多原生数组没有的一些功能。

我们可以理解成ArrayList是Array的一个升级版

7.Map有什么特点?

以键值对存储数据

元素存储顺序是无序的

不允许出现重复键

 

posted @   开源遗迹  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示