什么是泛型

  1. public class ArrayList<T> {
  2. private T[] array;
  3. private int size;
  4. public void add(T e) {...}
  5. public void remove(int index) {...}
  6. public T get(int index) {...}
  7. }
  8. // T可以是任何class
  9. // 创建可以存储String的ArrayList:
  10. ArrayList<String> strList = new ArrayList<String>();
  11. // 创建可以存储Float的ArrayList:
  12. ArrayList<Float> floatList = new ArrayList<Float>();
  13. // 创建可以存储Person的ArrayList:
  14. ArrayList<Person> personList = new ArrayList<Person>();
  15. // 总结
  16. /*
  17. 泛型就是编写模板代码来适应任意类型;
  18. 泛型的好处是使用时不必对类型进行强制转换,它通过编译器对类型进行检查;
  19. 注意泛型的继承关系:可以把ArrayList<Integer>向上转型为List<Integer>(T不能变!),但不能把ArrayList<Integer>向上转型为ArrayList<Number>(T不能变成父类)。
  20. */

使用泛型

  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. // 使用泛型
  4. public class Main {
  5. public static void main(String[] args) {
  6. ArrayList<String> list = new ArrayList<String>();
  7. list.add("hello");
  8. list.add("world");
  9. String first = list.get(0);
  10. String second = list.get(1);
  11. System.out.println(first + second);
  12. }
  13. }
  14. public class Main {
  15. public static void main(String[] args) {
  16. ArrayList<Number> list = new ArrayList<>();
  17. list.add(new Integer(123));
  18. list.add(new Double(123.12));
  19. Number first = list.get(0);
  20. Number second = list.get(1);
  21. System.out.println(first);
  22. System.out.println(second);
  23. }
  24. }
  25. // ArrayList<Number> list = new ArrayList<>();后面的<>里面的Number可以省略,会自动识别出Number
  26. // 泛型接口
  27. public class Main{
  28. public static void main(String[] args) {
  29. String[] ss = new String[]{"xiaoshuai","shaoshuai","shuai"};
  30. Arrays.sort(ss);
  31. System.out.println(Arrays.toString(ss));
  32. }
  33. }
  34. // String本身已经实现了Comparable<String>接口,所以可以进行排序
  35. // 换成我们自定义的Person类型就需要写Comparable<Person>接口
  36. public class Main{
  37. public static void main(String[] args) {
  38. Person[] ps = new Person[]{
  39. new Person("shuai",99),
  40. new Person("shaoshuai",88),
  41. new Person("xiaoshuai",77),
  42. };
  43. Arrays.sort(ps);
  44. System.out.println(Arrays.toString(ps));
  45. }
  46. }
  47. class Person implements Comparable<Person>{
  48. String name;
  49. int score;
  50. Person(String name, int score){
  51. this.name = name;
  52. this.score = score;
  53. }
  54. public int compareTo(Person other){
  55. return this.name.compareTo(other.name);
  56. }
  57. public String toString(){
  58. return this.name + "," + this.score;
  59. }
  60. }