JAVA中特殊意义的接口(部分)

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接口

这个也是标识接口,表示可以进行快速访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值