深入解析Java容器核心知识:ArrayList与Vector的区别及面试题详解
花了一周时间把Java容器的核心知识复习了一遍,感觉集合没什么好怕的! ! (哈哈哈……)现在总结一下吧~~

回顾目录:
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 画完了! ! ! ! !
List与Set数据结构区别及LinkedList与ArrayList选择指南
Object> Java中有将二维数组转化为二维的List的方法吗 > ArrayList< 的方式 即ArrayList< (objection逆转裁判)
ArrayList new Arrays.asList 的对比 Arrays.asList 和 Java (arraylist)
Java并发基础常见面试题总结:线程与进程详解及Java程序员核心知识指南
java中arraylist与list,java里面arraylist
> Java中有将二维数组转化为二维的List的方法吗 Object> 即ArrayList< ArrayList< 的方式