泛型类
- 泛型(Generics)是在JDK1.5中推出的,其主要目的是能够创建具备类型安全的集合框架
- 可使用“class 名称 <泛型列表> ”声明一个泛型类,泛型列表中能够是任何接口或对象,但不能是基本数据类型
- 泛型类声明和建立对象时,类名后多了一对“<>”,并且必需要用具体的类型替换“<>”中的泛型
- 泛型类中的泛型变量bottom只能调用Object类中的方法
- 使用泛型类创建的数据结构时,没必要进行强制类型转换,在运行时不要求进行类型检查,使代码更安全
java
链表
- 链表是由若干个称做节点的对象组成的一种数据结构,每一个节点含有一个数据和下一个节点的引用
- 在java中使用LinkedList泛型类来建立以链表结构存储数据的对象
- 链表使用add方法等经常使用方法对进行操做结点
- 结点是自动连接在一块儿的
- 链表对象可使用iterator()方法获取一个Iterator对象,该对象就是针对当前链表的迭代器
- java也提供了顺序结构的动态数组表类ArrayList,数组表不适合动态地改变它存储的数据,但数组表得到第n个单元中的数据的速度要比链表得到第n个单元中的数据快
- 经过Collection类咱们还能够将链表中的数据从新随机排列以及旋转git
LinkedList泛型类
- LinkedList泛型类建立的对象以链表结构存储数据,习惯上称LinkedList类建立的对象为链表对象
- 经常使用方法:
LinkedList<E>
泛型类实现 Lis<E>
泛型接口中的一些经常使用方法:算法
public boolean add(E element) //向链表末尾添加一个新的节点,该节点中的数据是参数elememt指定的数据。 public void add(int index ,E element)// 向链表的指定位置添加一个新的节点,该节点中的数据是参数elememt指定的数据。 public void clear()// 删除链表的全部节点,使当前链表成为空链表。 public E remove(int index) //删除指定位置上的节点。 public boolean remove(E element)// 删除首次出现含有数据elemen的节点。 public E get(int index) //获得链表中指定位置处节点中的数据。 LinkedList<E>泛型类自己新增长的一些经常使用方法: public void addFirst(E element) //向链表的头添加新节点,该节点中的数据是参数elememt指定的数据。 public void addLast(E element)// 向链表的末尾添加新节点,该节点中的数据是参数elememt指定的数据。 public E getFirst() //获得链表中第一个节点中的数据。 public E getLast() //获得链表中最后一个节点中的数据。 public E removeFirst() //删除第一个节点,并返回这个节点中的数据。
洗牌与旋转
- Collections类还提供了将链表中的数据从新随机排列的类方法以及旋转链表中数据的类方法:数组
public static void shuffle(List<E> list)// 将list中的数据按洗牌算法从新随机排列。 static void rotate(List<E> list, int distance) //旋转链表中的数据。 public static void reverse(List<E> list) //翻转list中的数据。
堆栈
- 堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操做
- 使用Stack泛型类建立一个堆栈对象
- 使用push、pop、empty、peek、search等方法对栈进行操做或查看栈的状态
...安全
tack<E>//泛型类建立一个堆栈对象,堆栈对象经常使用方法 public E push(E item);//实现压栈操做 public E pop();//实现弹栈操做 public boolean empty();//判断堆栈是否还有数据 public E peek();//获取堆栈顶端的数据,但不删除该数据 public int search(Object data);//获取数据在堆栈中的位置
散列映射
- HashMap<K,V>对象采用散列表这种数据结构存储数据,习惯上称HashMap<K,V>对象为散列映射
- 可使用put、clear、clone等方法对散列进行操做
- 将values方法返回一个实现Colletion接口类建立的对象,可使用接口回调技术,即将该对象的引用赋值给Collection接口变量,该接口变量能够回调iterator()方法获取一个Itertaor对象,这个I
- lterator对象存放散列映射中全部键/值对中的值
...数据结构
经常使用方法: public void clear()// 清空散列映射 public Object clone()// 返回当前散列映射的一个克隆 public boolean containsKey(Object key)// 若是散列映射有“键/值”对使用了参数指定的键,方法返回true,不然返回false public boolean containsValue(Object value)// 若是散列映射有“键/值”对的值是参数指定的值 public V get(Object key)// 返回散列映射中使用key作键的“键/值”对中的值 public boolean isEmpty() //若是散列映射不含任何“键/值”对,方法返回true,不然返回false public V remove(Object key)// 删除散列映射中键为参数指定的“键/值”对,并返回键对应的值 public int size() //返回散列映射的大小,即散列映射中“键/值”对的数目
树集
- TreeSet类建立的对象称做树集
- 在树集中,同一层中的结点从左到右按:大小顺序递增,从上到下递增
- 在插入树集的结点前要在建立对象的类中实现Comparable接口
- 树映射是一种特殊的树,树映射的结点存储关键字/值对
...框架
自动装箱与拆箱
- 自动装箱:程序容许把一个基本数据类型添加到相似链表等数据结构中,系统会自动完成基本类型到相应对象的转换
- 自动拆箱:即自动装箱逆过程学习
问题1:编译程序时显示使用了不安全的操做。
问题1解决方案:书上已经说明这是因为JDK1.5后的编译器会在使用旧版本的LinkedList类时给出警告信息,忽略该信息直接运行便可。使用javac -Xlint:unchecked Example15_4.java命令对代码进行编译
上传码云调试