深入解析Java容器核心知识:ArrayList与Vector的区别及面试题详解

花了一周时间把Java容器的核心知识复习了一遍,感觉集合没什么好怕的! ! (哈哈哈……)现在总结一下吧~~

深入解析Java容器核心知识:ArrayList与Vector的区别及面试题详解

回顾目录:

Java 容器可以分为两大类:

放

树集

地图

TreeMapConcurrentHashMapHashtable(理解,,已过时)

突出显示的是我们最常使用的容器。

其实我也不知道怎么总结好,因为我以前写每篇文章的时候都总结过。现在再罗列出来似乎有点水了,所以我决定回答一些Java容器面试题!

当然,我的回答可能不正确。如有错误,请指出。希望大家不吝在评论区留言指正~~

1.ArrayList和Vector的区别

共同点:

区别:

扩展尺寸:

2.HashMap和Hashtable的区别

共同点:

区别:

是否允许为null:

包含方法

继承不同:

3.List和Map的区别

共同点:

差异:

元素是否可重复:

是否按顺序排列:

4、Set中的元素不能重复,那么用什么方法来区分是否重复呢?你应该使用==还是equals()?

我们知道Set集合实际上是使用Map集合的put方法来添加元素的。

以HashSet为例。 HashSet中的元素不能重复。这体现在源码中(HashMap):

    
    // 1. 如果key 相等  
    if (p.hash == hash &&
        ((k = p.key) == key || (key != null && key.equals(k))))
        e = p;
    // 2. 修改对应的value
       if (e != null) { // existing mapping for key
            V oldValue = e.value;
            if (!onlyIfAbsent || oldValue == null)
                e.value = value;
            afterNodeAccess(e);
            return oldValue;
       }

添加元素时,如果key(也是Set集合对应的元素)相等,则修改value。在Set集合中,value值只是一个Object对象(该对象对于Set本身来说是无用的)。

也就是说:如果Set集合添加的元素相同,则根本不插入(只修改一个无用的值)!从源码(HashMap)也可以看出,同时使用了==和equals()方法!

5.集合与集合的区别。 Collection是集合的上级接口。它继承了Set和List接口。 Collections是集合的工具类,它提供了一系列静态方法来对集合进行搜索、查找、同步等操作。 6.说一下ArrayList和LinkedList的存储性能和特点

ArrayList底层是数组,LinkedList底层是双向链表。

6.1 扩展:

ArrayList的增删改查并不一定比LinkedList慢。

7.Enumeration和Iterator接口的区别

我在上一篇文章中没有详细谈论它们。我只是粗略地知道Iterator取代了Enumeration,而Enumeration是一个旧的迭代器。

与 Enumeration 相比,Iterator 更安全,因为它可以防止其他线程在遍历集合时修改集合。

有以下三个区别:

8.ListIterator有什么特点?

只要看一下源代码就可以知道:

9.什么是并发集合类?

Java 1.5 并发包 (java.util.concurrent) 包含线程安全的集合类,允许在迭代时修改集合。

10、如果Java中HashMap的键值是类对象,那么该类需要满足什么条件?

您需要重写此类的 hashCode() 方法及其 equals() 方法。

一般来说,我们认为只要两个对象的成员变量的值相等,那么我们就认为这两个对象是相等的!因为Object底层是比较两个对象的地址,而这个对我们开发来说意义不大~这就是为什么我们要重写equals()方法

重写equals()方法后,必须重写hashCode()方法。因为equals()判断两个对象是相同的,当对同一个对象调用hashCode()方法时,应该返回相同的值!

11. 与 Java Collections Framework 相关的最佳实践有哪些?根据需要确定集合类型。如果是单列集合,我们考虑使用Collection下的子接口ArrayList和Set。如果是建图的话我们会考虑使用Map~

确定了我们的集合类型之后,接下来我们就确定使用集合类型的哪个子类啦~我觉得可以简单地分为几个步骤:

迭代时是否需要排序(插入顺序是有序的)

是否需要排序(自然顺序或手动排序)

估计集合中存储的数据量。无论是List还是Map,它们的动态增长都会带来性能消耗。初始化集合时给予合理的容量,会降低动态增长的成本~使用泛型避免运行时的ClassCastException。尽可能使用集合工具类,或者获取只读、同步或空集合,而不是编写自己的实现。它将提供代码的可重用性,并且具有更好的稳定性和可维护性。 12、向ArrayList集合添加10000条数据如何提高效率?

ArrayList默认初始容量为10,当要插入大量数据时,需要不断扩容,扩容极大影响性能。所以,现在10万条数据都清楚了,我们就可以在初始化的时候直接设置ArrayList的容量了!

这样效率就会提高~

13. 总结

2018年4月15日17:14:03,我找到了一些面试问题并回答了,但感觉不够满意。很多我认为比较重要的知识点都找不到对应的面试题(可能是我的搜索能力太差了?)。

我把这篇文章当作是一个合集的总结,但感觉没什么可写的,所以回答了一些面试问题。找了一段时间的面试题,感觉不够系统。对于这个总结,我不想在这里复制前几章的总结。所以我决定画一张思维导图来结束这篇文章!

2018年4月15日 19:31:33 画完了! ! ! ! !

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

24阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

27阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

23阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读