原标题:Java集合中的那些事
1、集合的由来
面向对象语言对于事物的操作都是以对象体现的,为了方便对多个对象的操作,java就产生了集合类,用于对不同对象进行操作!
虽然存储多个对象,可以使用数组,但是数组的长度固定,不适应变化的需求,所以Java就提供了集合。
2、集合和数组的区别
数组:可存储基本数据类型,虽然也可以存储对象,但是长度固定可以存储基本类型和引用类型 但是是同一种类型是的
集合:长度可变,只能用于存储对象,集合可以用来存储不同类型的对象
A:长度区别
数组的长度固定
集合长度可变
B:内容不同
数组存储的是同一种类型的元素
而集合可以存储不同类型的元素
C:元素的数据类型问题
集合只能存储引用类型
数组可以存储基本数据类型,也可以存储引用数据类型
刚说过集合是存储多个元的,但是呢,存储多个元素我们也是有不同需求的:比如说,我要这多个元素中不能有相同的元素,再比如说,我要这多个元素按照某种规则排序一下。针对不同的需求,Java就提供了不同的集合类,这样呢,Java就提供了很多个集合类。这多个集合类的数据结构不同,结构不同不重要的,重要的是你要能够存储东西,并且还要能够使用这些东西,比如说判断,获取等。既然这样,那么,这多个集合类是有共性的内容的,我们把这些集合类的共性内容不断的向上提取,最终就能形成集合的继承体系结构。
3、Collection集合的功能概述?
Collection层次结构中的根接口。Collection表示一组对象,这些对象也称为 collection 的元素。一些 collection允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。
4、迭代器为什么不定义成一个类,而是接口呢?
假设定义成一个类,这样我们就可以通过创建对象,调用该类的方法来实现集合的遍历,但是,java中提供了很多集合类,而这些集合类的数据结构是不同的,所以,存储方式也是不同的。进而,他们的遍历方式也应该是不同的,最终,迭代器就没有定义成一个具体的类。而无论你使用何种集合,在集合的遍历上都应该具备元素获取的功能,同时再辅助相应的判断,这样在遍历是才能更加准确。也就是说判断和获取是集合遍历不可缺少的,而每种集合的遍历又有所不同,所以,我们把这两个功能提取出来,并不具体实现,这种方式就是接口。
5、List集合的特有功能?
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。特点:有序 可重复 可为空 有下标。
6、常见的数据结构的特点?
栈:先进后出 先入栈再出栈 举例:子弹夹
队列:先进先出 举例:买票
数组:存储同一类型的多个元素的容器 有索引方便获取 特点:查询快,增删慢
链表:由一个链子把多个结点链接起来组成的数据 结点:由数据和地址组成 特点:查询慢,增删快
7、List集合的子类特点?
ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高
Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低
LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高
8、List的三个儿子你准备使用谁?请说明理由
查询多就用ArrayList
增删多就用LinkedList
什么不知道就用ArrayList
就算需要线程安全也不用Vector,可以用 Collections.synchronizedList 将ArrayList包装起来
9、并发修改异常
A:出现的现象
迭代器遍历集合,集合修改集合元素
B:原因
迭代器是依赖于集合的,而集合的改变迭代器并不知道。
C:解决方案
a:迭代器遍历,迭代器修改(ListIterator)元素添加在刚才迭代的位置
b:集合遍历,集合修改(size()和get())元素添加在集合的末
有想学Java的朋友欢迎来报名 。机不可失哦。更多技术交流者或想获取JAVA资料请加微信(858568103)返回搜狐,查看更多
责任编辑: