1 比较器
1) Comparable接口,对类对象进行比较,下面我们来实现对象数组的排序:
没有实现Comparable接口的Student类:
测试类:
运行结果:
从运行结果可以看出是类在转换的时候出现了异常,提示两个无关的类发生转换,在JAVA文档与JAVA源码中都明确标明所有的元素都必须实现Comparable接口。
实现Comparable接口的Student类:
运行结果:
2) Comparator(挽救的比较器)
Comparable接口的主要特征是在类定义的时候就默认实现好的接口,如果要对已经实现好类(没有实现Comparable接口的类,如上面没有实现Comparator接口的Student类,又不可以对Student类进行代码的修改)进行进行比较,那么我们可以使用Comparator接口(函数式接口)来做比较器:
定义排序的工具类:
测试类:
2 Runnable接口
Runnable是实现多线程中的最常用的方式,不过它不能启动多线程,只能通过Thread类(Runnable的子类)中Start()方法启动多线程,这里不多介绍,感兴趣的可以我看我之前写博客点击打开链接
3 迭代器
1)Iterator通用迭代器(从前往后),方法主要是hasNext()判断是不是还有下一个元素与next()取得下一个元素,一般结合使用;
2)ListIterator(List迭代器,双向)迭代器,是Iterator的子类 新增的主要方法是;很多人在第一次使用这个迭代器的时候往往都是失败,因为它不能像Iterator那样使用:
错误使用方式:
结果是什么也没有输出,这到底是为什么,我们打开ArrayList(所有的List子类情况一样)源码,可以清楚看到:listIterator() 中return new ListItr(0),然后把定义在Itr内部类(Iterator的子类)中定义的cursor(表示数据的长度)赋值为0,相当于没有任何数据进行迭代。我们可以通过以下的方式进行迭代:
1) 在List的子类 中有listIterator(int index)与size()方法,我们可以使用这个的组合进行ListIterator迭代器的初始化;
2)因为cursor是Itr中定义,我们可以iterator()方法来改变cursor的值,这样使用意义不是很大,只是通过看它们的源码,觉得这样可以让我们的进程正常进行。
3)调用next()(要先进行hasNext()判断,为了排除集合的长度真的是0)来进行cursor的值的修改,意义也不是很大,只是通过源码分析得到而已。
4 Cloneable接口
这个类为没有定义有任何的方法,说明它只是做一个标识接口,表明一种能力,也就是说实现这个接口,都可以进行克隆。我们打Object类,找到clone() 方法,定义如下protected native Object clone() throws CloneNotSupportedException,说明我必须要履写clone();
修改后的Student类:
编写测试类:
测试结果:
只有姓名发生改变,说明这不是对象引用。
5 Serializable接口
这个也是标识接口,表示一类可以进行序列化,如果一个类实现这个接口,那就说明这个类可以序列化,序列化的目的是将一个实现 了Serializeble接口的对象转换成一个字节序列。
6 RandomAccess接口
这个也是标识接口,表示可以进行快速访问。