提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
java面试中,集合类是面试高频、重灾区,有很多面试者都倒在这一关,导致没有面上或者没有达到自己的待遇。所以集合类的底层尤为重要。
一、JAVA集合类有哪些?
Java集合类有两大接口体系:Collection和Map,今天主要先了解下Collection集合。
二、集合介绍
1.List
特点:
1.底层是数组
2.可重复
3.有序
4.由Object[]构成
源码分析之ArrayList:
jdk7:初始化容量为10数组。扩容:size>长度时:
扩原容量1.5倍,原数组拷贝给新数组
结论:建议开发中使用带参的构造器。
jdk8:初始化数组为{},首次add时,创建容量为10的数组。 后续扩容和 1.7一致。
结论:jdk8更加节约内存资源。大部分场景下使用ArrayList
源码分析之LinkedList:
底层是链表: 前驱+后继+数据。 增删方式比较方便
不涉及扩容
结论:增删较多场景下使用。
2.Set
特点:
1.无序
2.不可重复
3.有HashMap<Object,Value> 构成。Value为固定值。
源码分析之HashSet
初始化长度为16
add时。计算出数据对应数组的位置后插入。首先计算数据的hashcode,如果相同,调用equals方法判断,如果再次一致,则视为同一对象,不添加。
在同一角标位置,遇到不同的元素,在进行添加时。jdk1.7将原有位置让给新元素,执行旧元素。jdk1.8原位置元素指向新元素。
LinkedHashSet:和HashSet基本一致,不过遍历顺序和添加顺序一致。因为底层多出了两个指针引用,因为是链表结构。所以会有顺序。但是存储顺序依旧随机,也是不能重复的。
TreeSet自带比较器,有两种方式实现。第一种使得比较元素自带比较方式。第二种构建比较器,通过参数的方式给TreeSet。
3.Map
HashMap、LinkedHashMap、Hashtable、TreeMap
底层是 Entry[] 一个k,v键值对就是一个Entry结构。
jdk1.7下数据结构是 Entry[]+链表
jdk1.8下数据结构是 Entry[]+链表+红黑树
jdk1.7下
当执行put(k,v)时,会计算k的hashcode值,然后根据算法得出相应角标位置。
1、当前位置没有元素。直接添加
2、当前位置有元素(1个或多个),拿着k和所有该位置元素进行比较。如果k的hashcode和所有元素的都不相同,添加成功
3、当出现某个元素的hashcode值相同时
equals为false,添加成功
equals为true时,将v替换为相同key对应的value。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。