LinkedList
  • 构造方法:
    LinkedList():构造一个空列表。
    LinkedList(Collection<? extends E> c):构造一个包含指定collection中的元素的列表,这些元素按其collection的迭代器返回的顺序排列。
  • 特有的方法:
    1. 添加:
    public void addFirst(E e):将指定元素插入此列表的开头。
    public void addLast(E e):将指定元素添加到此列表的结尾。
    2. 获取元素,但不删除元素:
    public E get(int index):返回此列表中指定位置的元素。
    public E getFirst():返回此列表的第一个元素。
    public E getLast():返回此列表的最后一个元素。
    3. 获取元素且删除元素:
    public E remove():获取并移除此列表的头(第一个元素)。
    public E remove(int index):移除此列表中指定位置处的元素。
    public boolean remove(Object o):从此列表中移除首次出现的指定元素(若存在)。
    public E removeFirst():移除并返回此列表的第一个元素。
    public E removeLast():移除并返回列表的最后一个元素。
    4. 修改:
    public E set(int index,E element):将列表中指定位置的元素替换为指定元素。
栈和队列数据结构
栈特点:先进后出;队列特点:先进先出。
/**
* 定义一个队列数据结构。
*/
class Queue {
	// 封装了一个链表数据结构。
	private LinkedList link;
	
	//队列初始化时, 对链表对象初始化。
	Queue() {
		link = new LinkedList();
	} 

	//队列的添加元素功能。
	public void myAdd(Object obj) {
		// 内部使用的就是链表的方法。
		link.addFirst(obj);
	} 

	//队列的获取方法。
	public Object myGet() {
		return link.removeLast();
	} 

	//判断队列中元素是否空, 没有元素就为 true。
	public boolean isNull() {
		return link.isEmpty();
	}
}
泛型

为什么会出现泛型?
因为集合存放的数据类型不固定,故往集合里面存放元素是,存在安全隐患,如过在定义集合时,可以向定义数组一样指定一样指定数据类型,那么就可以解决该类安全问题。JDK1.5后出现了泛型,用于解决集合框架的安全问题。泛型是一个类型安全机制,只存于编译期间。

泛型的好处

将运行时期出现的ClassCastException(类型转换异常)问题转移到编译时期;
避免了前置转换的麻烦。

泛型的基本使用

通过<>来定义要操作的的引用数据类型。
ArrayList<String> a1 = new ArrayList<String>();ArrayList<String> a1 = new ArrayList<>();ArrayList<String> a1 = new ArrayList();泛型使用的注意事项
前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)。

泛型的形式
  • 泛型类:即自定义泛型类
    1. 当类中要操作的引用数据类型不确定时,早起定义Object来完成扩展,现在定义泛型来完成。
    2. 局限性:泛型类定义的泛型,在整个类中有效,如果该泛型类的方法被调用
  • 泛型方法:泛型放在返回值前面,修饰符后面
    1. 为了避免泛型类的局限性,让不同方法可以操作不同的类型,而且类型还不确定,则可以将泛型定义在方法上。
    2. 特殊之处:静态方法不可以访问类上定义的泛型如果静态方法操作的应用数据类型不确定,可以将泛型定义在静态方法上。
  • 泛型接口
    当泛型定义在接口上时,则子类中要指定实现接口类型,同时还可以将子类也定义为泛型类。
泛型的高级应用

?通配符
当指定两种泛型集合,则迭代时也要定义两种泛型的迭代器,麻烦,此时可通过将迭代器的泛型改为<?>,如Iterator<?> it = al.iterator(); 两种泛型限定
向上限定:<? extends E>;E 可以接收 E 类型或者 E 的子类;
向下限定:<? super E>;E 可以接收 E 类型或者 E 的父类;

  • <?>
    1. 变量可以指向什么类型的对象:具有任何泛型的集合对象;
    2. 可以存储什么东西:由于?不确定具体类型,所以不能add()任何类型;
    3. 取出时用什么接收:只能用 Object 接收。
    应用:不能存入,只能获取,所以一般用作方法的返回值声明。
  • <? extends E>:接收E类型或者E的子类型
    1. 变量可以指向什么类型的对象:具有 E 泛型或者E子类泛型的集合;
    2. 可以存储什么东西:由于不确定是哪个 E 的子类,所以不能存任何东西;
    3. 取出时用什么接收:只能用E及E的父类类型接收。
    应用:往集合里存的时候定义一个大的类型,可以存储E类型或者E的子类。
  • <? super E>:接收E类型或者E的父类型
    1. 变量可以指向什么类型的对象:具有 E 泛型或者 E 父类泛型的集合;
    2. 可以存储什么东西:只能存储 E 或者 E 的子类对象;
    3. 取出时用什么接收:由于存储的可能是任何的 E 的子类对象,所以只能用 Object 接收。
    应用:从集合里取出的时候进行操作的时候,可以定义 E 类型或者 E 的父类型接收。

希望能帮助到有需要的人。