廖雪峰java教程学习笔记
本博客是基于廖雪峰java教程写的学习笔记
文章目录- Java泛型
- 前言
- 一、泛型是什么?
- 二、ArrayList
- 1.ArrayList内部
- 2.ArrayList
- 3.向上转型
- 三、使用泛型
- 1.使用
- 2.泛型接口
- 四、擦拭法
- 总结
前言
本人计算机小白一枚,写博客的原因一是为了让自己能够更好地理解知识点,加强记忆,二是为了让有需要的同学康康,三是为了能够结交到有相同兴趣的小伙伴,大家一起加油!!!然后本博客只是对自己在教程中不熟悉的地方做一个记录,所以并不全面。
一、泛型是什么?
泛型是一种“代码模板”,可以用一套代码套用各种类型
在抽象地说泛型是什么之前,我们可以先看一下它的典型常用的例子–>ArrayList
ArrayList内部就是一个Object[]数组,配合存储一个当前分配的长度,就可以充当“可变数组”,内部具体如下:
public class ArrayList {
private Object[] array;
private int size;
public void add(Object e) {...}
public void remove(int index) {...}
public Object get(int index) {...}
}
如果用ArrayList存储String类型,会有如下缺点:1)需要强制转型;2)不方便,易出错。
例如:
ArrayList list = new ArrayList();
list.add("Hello");
// 获取到Object,必须强制转型为String:
String first = (String) list.get(0);
要解决上述问题,可以单独编写一种StringArrayList,这样存入的必须是String,取出来的也一定是String,但是如果要存储Integer,还需要为Integer单独编写一种IntegerArrayList,这就非常麻烦,于是便有了泛型。
2.ArrayList代码如下(示例):
public class ArrayList{ private T[] array; private int size; public void add(T e) {...} public void remove(int index) {...} public T get(int index) {...} }
T可以是任何class。这样我们就可以创建任意类型的ArrayList,因此,泛型就是定义一种模板。
3.向上转型在Java标准库中的ArrayList
Listlist = new ArrayList ();
注意:不能将ArrayList
三、使用泛型 1.使用
定义泛型类型为
Listlist = new ArrayList (); list.add("Hello"); list.add("World"); String first = list.get(0); String second = list.get(1);
编译器如果能自动推断出泛型类型,就可以省略后面的泛型类型。例如:
List2.泛型接口list = new ArrayList ();
接口也可以使用泛型哦,例如Arrays.sort(Object[])可以对任意数组进行排序,但待排序的元素必须实现Comparable
public interface Comparable{ int compareTo(T o); }
可以直接对String数组进行排序,因为String本身已经实现了Comparable
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Person[] ps = new Person[] {
new Person("Bob", 61),
new Person("Alice", 88),
new Person("Lily", 75),
};
Arrays.sort(ps);
System.out.println(Arrays.toString(ps));
}
}
class Person implements Comparable {
String name;
int score;
Person(String name, int score) {
this.name = name;
this.score = score;
}
public int compareTo(Person other) {
return this.name.compareTo(other.name);
}
public String toString() {
return this.name + "," + this.score;
}
}
四、擦拭法
Java的泛型是采用擦拭法实现的;
擦拭法决定了泛型
1)不能是基本类型,例如:int;
2)不能获取带泛型类型的Class,例如:Pair
3)不能判断带泛型类型的类型,例如:x instanceof Pair
4)不能实例化T类型,例如:new T()。
因为引入了泛型,所以,只用Class来表示类型已经不够了,实际上,Java的类型系统结构如下:
提示:这里对文章进行总结:
例如:以上就是Java泛型的简单介绍。



