day8
1.使用泛型出现的问题
任何基本类型都不能作为类型参数
因此,不能创建类如ArrayList
|
|
但是,自动包装机制不能运用于数组
参数化接口
一个类不能实现同一个泛型接口的两种变体,由于擦除的原因,会让两个变体都变成相同的接口,比如:
|
|
上述RedApple无法编译,因为两次实现了Fruits。
2.数组
数组的优点:比ArrayList的效率高,访问速度快。在没有泛型之前,所有容器的持有对象都视为Object,而数组可以维持某个具体对象的序列。数组可以使用[]来访问元素。
应用:一般情况下优先使用容器,功能更多,特殊情况对效率有要求可用数组。
数组标识符本身也是一个对象引用,指向堆中一个保存指向其他对象引用的数组。
|
|
多维数组:
|
|
另外,数组对泛型不支持,下面这种声明错误:
|
|
Apple[]a={new Apple(),new Fruit()};
Apple[]b=new Apple[a.length];
for(int i=0;i<a.length;i++){
b[i]=a[i];
}
```
有一个方法System.arraycopy()
可以用来复制数组比for循环要快。
数组比较,排序
只要类中实现了Comparable接口,java.lang.Comparable
,就可以排序,接口只含有一个方法compareTo()
,类似于c++中重载比较操作符。
也可以自己定义一个实现Comparator接口的类,有compare()
和equals()
两个方法,只要事先compare()就可以了。
Collections.reverseOrder()
可以产生一个Comparator用来逆序sort。