一、泛型的引入
我们之前实现过顺序表,只能保存int类型元素,如果现在要保存指向person类型的引用的顺序表,我们就引入了泛型。
1.泛型类的定义
(1)尖括号<>是泛型的标志
(2)E是类型变量(Type Variable),变量名一般要大写
(3)E在定义时是形参,代表的意思是MyArrayList最终传入的类型,但现在还不知道
public class MyArrayList<E>{
private E[] array;
private int size;
}
注意:
1.泛型类可以一次有多个类型变量,用逗号分割
2.不能new泛型类型的数组
3,。简单类型(基本数据类型)不能作为泛型类型的参数
2.泛型类的擦除机制
(1)泛型是作用在编译期间的一种机制,即运行期间没有泛型的概念,它的概念只存在于编译期间。
(2)泛型代码在运行期间,利用Object达到效果,将E擦除为Object,<>当中的数据类型不参与类型的组成,因为编译时被擦除了,所以运行期间没有泛型的概念。
3.使用泛型的好处
(1)可以在存放元素时,自动进行类型的检查
(2)获取元素时,不需要进行强制类型转换
二、包装类的引入
前面我们说了基本数据类型不能作为泛型的参数,那如果需要存基本数据类型,用什么做参数呢?我们就引入了包装类的概念,包装类比基本类数据类型功能更多,更强大。
三、List的使用
类和接口总览
常见方法
(1)List(线性表)
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
List<Integer> list1 = new ArrayList<>();
//boolean add(E e) 尾插e
list.add(1);
list.add(2);
list.add(3);
System.out.println("尾插后List: " + list);
list1.add(9);
System.out.println("尾插后List1 " +list1);
//void add(int index,E element) 将e插入到index位置
list.add(1,4);
list.add(3,5);
System.out.println("将e插入到index位置后List " +list);
//boolean addAll(Collection<?extends E>c) 尾插c中所有元素
list.addAll(list1);
System.out.println("尾插c中所有元素后List :" + list);
//E remove(int index) 删除index 位置元素
list.remove(1);
System.out.println("删除index位置元素后 :" + list);
//boolean remove (Object o) 删除遇到的第一个o
list.remove(1);
System.out.println("删除遇到的第一个o :" + list);
//E get(int index) 获取下表为index的元素
System.out.println("获取下标为index的元素:" + list.get(3));
//E set(int index,int element) 更新下表为index的元素
list.set(0,10);
System.out.println("更新下表为index的元素后List " + list);
//boolean contains(Object o) 判断线性表中是否有o
System.out.println("是否含有o:" +list.contains(10));
//int indexOf(object 0) 返第一个o所在下标
int index = list.indexOf(10);
//int lastIndexOf(Object o) 返回最后一个o的下标
System.out.println("最后一个o下标为: " + list.lastIndexOf(3));
//List<E> subList(int fromIndex,int toIndex) 截取部分list
System.out.println("截取部分List: " +list.subList(0, 2));
//void clear() 清空
list.clear();
}
}
结果如下:
(2)ArrayList(顺序表)
(3)LinkedList(链表)
注意:new ArrayLIst<>() 时,初始容量为0,只是第一次插入一个数据时,容量变为10.