Java教程

【面试题】Java集合

本文主要是介绍【面试题】Java集合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

【面试题】Java集合

Java集合类框架的基本接口有哪些?

Java集合类提供了一套设计良好的、支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有以下几个:

Collection:代表一组对象,每一个对象都是它的子元素。

Set:不包含重复元素的Collection。

List:有顺序的Collection,并且可以包含重复元素。

Map:可以把键(key)映射到值(value)的对象,键不能重复。

为什么集合类没有实现Cloneable和Serializable接口?

克隆(colning)或者序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化的。

什么是迭代器(Iterator)?

Iterator接口提供了很多对集合元素进行迭代的方法,每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object obj)删除,可以通过迭代器的remove()方法删除。

Iterator和ListIterator的区别是什么?

这两个都是接口。

Iterator可以用来遍历Set和List集合,但是ListIterator只能用来遍历List集合。

Iterator对集合只能是前向遍历,ListIterator既可以前向遍历,也可以后向遍历。

ListIterator继承了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引等。

hashCode()和equals()方法的重要性体现在什么地方?

Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法,如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也被用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。

HashMap和Hashtable有什么区别?

HashMap和Hashtable都实现了Map接口,因此有很多特性非常相似。但是,它们有以下不同点:

HashMap允许键和值是null,而Hashtable不允许键或者值是nul.

Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。

ArrayList和LinkedList有什么区别?

ArrayList和LinkedList都实现了List接口,它们有以下不同点:

ArrayList是基于索引的数据接口,它的底层是数组。它可以以0(1)时间复杂度对元素进行随机访问,因此查询某个元素的时间短。与此对应,LinkedList是以元素里了表的形式存储它的数据,每一个元素都和它的前一个和后一个元素连接在一起,在这种情况下,查找某个元素的时间长。

相对于ArrayList,LinkedList的插入、添加、删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。

Comparable和Comparator接口是干什么的?列出它们的区别

Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以给两个对象排序。具体来说,它返回附属,0,正数来表明输入对象小于,等于,大于已经存在的对象。Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。

equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true.

Enumeration接口和Iterator接口的区别有哪些?

Enumeration速度是Iterator的2倍,同时占用更少的内存。但是Iterator远比Enumeration安全,因为其他线程不能够修改正在被Iterator遍历的集合中的对象,同时Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。

HashSet和TreeSet有什么区别?

TreeSet中的数据是自动排序好的,不允许放入null值。

HashSet中的数据是无序的,可以放入null,但是只能放入一个null,两个集合中的值都不能重复,就如数据库中的唯一约束。

HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样的,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。

这篇关于【面试题】Java集合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!