java 基础之数据集合
1.为什么集合类没有实现Cloneable和Serializable接口?
克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。
2.Iterator和ListIterator的区别是什么?
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等
3.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常。
4. 集合与数组的区别
①数组长度是固定的,不能自动增长
集合长度是可以改变的,随着元素的增加而增加随着元素的减少而减少
②数组既可以存储基本数据类型也可以存储引用数据类型(对象)
集合只能存储引用数据类型,也可以存储基本数据类型,不过他会将基本数据类型封装成对象
5.集合分为单列集合和双列集合
6.泛型<定义存储什么数据类型>
泛型最好不要定义object,无意义
好处:
①将运行期的出意外转到编译期
②省去了强转的麻烦
使用概述
①泛型可以自己指定类型,但是在new对象时候给定指定类型
②方法泛型需要与类泛型一致,如果不一致需要在方法上指明该泛型,只要在使用时候传值即可
③静态方法中需要声明自己的泛型
④泛型接口
方式一:public class Demo implements interface<用类实现时需要指定类型>----------------------推荐
方式二:public class Demo<T> implements interface<T>