前言
花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈….),现在来总结一下吧~~ Java容器可分为两大类:
着重标出的那些就是我们用得最多的容器。 其实,我也不知道要怎么总结好,因为之前写每一篇的时候都总结过了。现在又把他们重新罗列出来好像有点水,所以,我决定去回答一些Java容器的面试题! 当然了,我的答案未必就是正确的。如果有错误的地方大家多多包含,希望不吝在评论区留言指正~~ 一、ArrayList和Vector的区别共同点:
区别:
二、HashMap和Hashtable的区别共同点:
区别:
三、List和Map的区别共同点:
不同点:
四、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?我们知道Set集合实际大都使用的是Map集合的put方法来添加元素。 以HashSet为例,HashSet里的元素不能重复,在源码(HashMap)是这样体现的: // 1. 如果key 相等 添加元素的时候,如果key(也对应的Set集合的元素)相等,那么则修改value值。而在Set集合中,value值仅仅是一个Object对象罢了(该对象对Set本身而言是无用的)。 也就是说:Set集合如果添加的元素相同时,是根本没有插入的(仅修改了一个无用的value值)!从源码(HashMap)中也看出来,==和equals()方法都有使用! 五、Collection和Collections的区别
六、说出ArrayList,LinkedList的存储性能和特性ArrayList的底层是数组,LinkedList的底层是双向链表。
6.1扩展:ArrayList的增删未必就是比LinkedList要慢。
七、Enumeration和Iterator接口的区别这个我在前面的文章中也没有详细去讲它们,只是大概知道的是:Iterator替代了Enumeration,Enumeration是一个旧的迭代器了。 与Enumeration相比,Iterator更加安全,因为当一个集合正在被遍历的时候,它会阻止其它线程去修改集合。
区别有三点:
八、ListIterator有什么特点
看一下源码的方法就知道了: 九、并发集合类是什么?Java1.5并发包(java.util.concurrent)包含线程安全集合类,允许在迭代时修改集合。
十、Java中HashMap的key值要是为类对象则该类需要满足什么条件?需要同时重写该类的hashCode()方法和它的equals()方法。
一般来说,我们会认为:只要两个对象的成员变量的值是相等的,那么我们就认为这两个对象是相等的!因为,Object底层比较的是两个对象的地址,而对我们开发来说这样的意义并不大~这也就为什么我们要重写 重写了equals()方法,就要重写hashCode()的方法。因为equals()认定了这两个对象相同,而同一个对象调用hashCode()方法时,是应该返回相同的值的! 十一、与Java集合框架相关的有哪些最好的实践
十二、ArrayList集合加入1万条数据,应该怎么提高效率ArrayList的默认初始容量为10,要插入大量数据的时候需要不断扩容,而扩容是非常影响性能的。因此,现在明确了10万条数据了,我们可以直接在初始化的时候就设置ArrayList的容量! 这样就可以提高效率了~ 十三、总结2018年4月15日17:14:03,上面找了一些面试题答了一下,感觉不够过瘾呀。很多我觉得比较重要的知识点我都没有找到对应的面试题(可能我搜索的能力太水了?)。 将这篇文章作为集合的总结篇,但觉得没什么好写就回答一些面试题去了,找了一会面试题又觉得不够系统。而这篇总结我又不想复制前面的章节总结到这里来。于是我决定画一个脑图来结束这篇文章! |
|