夜光序言:
岁月,渐渐带走了年少轻狂,也慢慢沉淀了冷暖自知。
正文:
以道御术 / 以术识道
我们在说泛型之前
我们先观察Java标准库提供的ArrayList
,它可以看作“可变长度”的数组,因为用起来比数组更方便。
实际上ArrayList
内部就是一个Object[]
数组,配合存储一个当前分配的长度,就可以充当“可变数组”:
package 什么是泛型;
public class ArrayList {
private Object[] array;
private int size;
public void add(Object e){
}
public void remove(int index){
}
public Object get(int index){
return index;
}
public static void main(String[] args) {
/* 如果用上述ArrayList存储String类型,会有这么几个缺点:
需要强制转型;
不方便,易出错。*/
ArrayList list = new ArrayList();
list.add("夜光"); //添加了一个String,但是有问题
//想要获取,必须强转一下
String first = (String) list.get(0);
//很容易出现ClassCastException,因为容易“误转型”:
}
}
package 什么是泛型;
/*
*
* @title StringArrayList
* @describe 要解决ClassCastException问题,我们可以为String单独编写一种ArrayList:
* @author hy
* @version
* @date 2019/12/4
*
*/
public class StringArrayList {
private String[] array;
private int size;
public void add(String e){
}
public void remove(int index){
}
public String get(int index){
return String.valueOf(index);
}
public static void main(String[] args) {
StringArrayList list = new StringArrayList();
list.add("夜光"); //添加了一个String,但是有问题
//想要获取,必须强转一下
String first = list.get(0);
/*list.add(new Integer(111));*/
}
}
package 使用泛型;
import java.util.Arrays;
//可以直接对String数组进行排序:
public class Main {
public static void main(String[] args) {
String[] ss = new String[]{
"orange","apple","pear"
};
Arrays.sort(ss);
System.out.println(Arrays.toString(ss));
}
}
package 使用泛型;
public class Person implements Comparable<Person>{
String name;
int score;
//构造器
public Person(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public int compareTo(Person other) {
return this.name.compareTo(other.name);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", score=" + score +
'}';
}
}
package 使用泛型;
import java.util.Arrays;
public class PersonTest {
public static void main(String[] args) {
Person[] ps = new Person[]{
new Person("Jim",111),
new Person("Jk",111),
new Person("Theshy",111),
};
Arrays.sort(ps);
System.out.println(Arrays.toString(ps));
}
}