龙哥带你玩转面试(3.0)------集合

来源:互联网 发布:上瘾网络剧结局是什么 编辑:程序博客网 时间:2024/05/16 18:34

1、java集合类框架的基本接口有哪一些?

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

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

Set:不包含重复元素的Collection

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

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

2、为什么集合类没有实现Cloneable和Serializale接口?

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

3、什么是迭代器(Iterator)?

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

4、Iterator和ListIterator的区别是什么?

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

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

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

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

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

6、HashMap和Hashtable有什么区别?

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

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

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

7、ArrayList和LinkedList有什么区别?

ArrayList和LinkedList都是实现了list接口但是有以下的一些不同点

ArrayList是基于索引的数据接口,他的底层是数组。他可以以O(1)的事件复杂度来对元素进行随机访问,因此查询某一个元素的事件短。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都是和它的前一个和后一个元素链接在一起,在这种情况下,查找某一个元素的时间比较长。相对于ArrayList,LinkedList的插入,添加和删除操作速度更快,因为当元素被添加到集合任意的位置的瘦,不需要向数组那样重新计算大小或者是更新索引

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

java提供 只包含一个compareTo()方法的Comparable接口,这个方法可以给两个对象进行排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。

java提供了包含compare()和equals()两个方法的comparator接口。compare()方法用来个两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法,需要一个对象作为参数,他用来决定输入参数是否和compareator相等。只有当两个参数意识一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才会返回true

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

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

10、HashSet和TreeSet有什么区别?

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

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

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

            

原创粉丝点击