20175334 《Java程序设计》第八周学习总结
教材学习内容总结
第十五章
- 泛型
- 泛型类声明
class 名称<泛型列表>
- 使用泛型类声明对象
- 和普通类相比,泛型类声明和创建对象时,类名后多了一对
<>
,而且必须要用具体的类型替换<>
中的泛型 - 泛型主要目的是可以建立具有类型安全的数据结构
- 和普通类相比,泛型类声明和创建对象时,类名后多了一对
- 泛型类声明
- 链表
LinkedList<E>
泛型类- 必须要指定
E
的具体类型,然后用add(E obj)
方法向链表依次增加结点
- 必须要指定
- 常用方法
public boolean add<E element>
,向链表的指定位置添加一个新的结点,该结点中的数据是参数element
指定的数据public void add(int index, E element)
,向链表的指定位置添加一个新的结点,该结点中的数据是参数element
指定的数据public void clear()
,删除链表的所有结点,使当前链表成为空链表public E remove(int index)
,删除指定位置上的结点public boolean remove(E element)
,删除首次出现含有数据element
的结点public E get(int index)
,得到链表中指定位置处结点中的数据public int indexOf(E element)
,返回含有数据element
的结点在链表中首次出现的位置,如果链表中无此结点则返回-1public int lastIndexOf(E element)
,返回含有数据element
的结点在链表中最后出现的位置,如果链表中无此结点则返回-1public E set(int index,E element)
,将当前链表index
位置结点中的数据替换为参数element
指定的数据,并返回被替换的数据public int size()
,返回链表的长度,即结点的个数public boolean contains(Object element)
,public void addFirst(E element)
,向链表的头添加新结点,该结点中的数据是参数element
指定的数据public void addLast(E element)
,向链表的末尾添加新结点,该结点中的数据是参数element
指定的数据public E getFirst()
,得到链表中第一个结点中的数据public E getLast()
,得到链表中最后一个结点中的数据public E removeFirst()
,删除第一个结点,并返回这个结点中的数据public E removeLast()
,删除最后一个结点,并返回这个结点中的数据public Object clone()
,得到当前链表的一个克隆链表,该克隆链表中结点数据的改变不会影响到当前链表中结点的数据,反之亦然
- 遍历链表
- 链表对象可以使用
iterator()
方法获取一个Iterator
对象,该对象是针对当前链表的迭代器
- 链表对象可以使用
- 排序与查找
public static sort(List<E>list)
,将list
中的元素按顺序排序int binarySearch(List<T>list,T key,CompareTo<T>c)
,使用析半法查找list
是否含有和参数key
相等的元素
- 洗牌与旋转
public static void shuffle(List<E>list)
,将list
中的元素按洗牌算法重新随机排序static void rotate(List<E>list,int distance)
,旋转链表中的数据public static void reverse(List<E>list)
,翻转list
中的数据
- 堆栈
- 一种只能在一端进行输入或输出数据的操作
public E push(E item)
,实现压栈操作(向堆栈中输入数据)public E pop()
,实现弹栈操作(从堆栈中输出数据)public boolean empty()
,判断堆栈是否还有数据public E peek()
,获取堆栈顶端的数据,但不能删除该数据public int search(Object data)
,获取数据在堆栈中的位置
- 散列映射
HashMap<K,V>
泛型类- 常用方法
- 遍历散列映射
public Collection values()
方法返回一个实现Collection
接口类创建的对象,可以使用接口回调技术,即将该对象的引用赋给Collection
接口变量,该接口变量可以回调iterator()
方法获取一个Iterator
对象,这个Iterator
对象存放散列映射中所有键/值对中的值
- 基于散列映射的查询
- 对于经常需要进行查找的数据可以采用散列映射来储存这样的数据,即为数据指定一个查找它的关键字,然后按着键/值对,将关键字和数据一并存入散列映射中
- 树集
TreeSet<E>泛型类
- 树集采用树结构存储数据,树结点中的数据会按存放的数据的“大小”顺序一层一层地依次排列,在同一层中的结点从左到右按字典顺序从小到大递增排列,下一层的都比上一层的小
- 结点的大小关系
- 树集不按添加的先后顺序排列,用
add
方法添加结点
- 树集不按添加的先后顺序排列,用
- 常用方法
public boolean add(E o)
,向树集添加结点,结点中的数据由参数指定,添加成功返回true
,否则返回false
public void clear()
,删除树集中的所有结点public void contains(Object o)
,如果树集中有包含参数指定的对象,则返回true
,否则返回false
public E first()
,返回树集中的第一个结点中的数据public E last()
,返回树集中的最后一个结点中的数据public boolean isEmpty()
,判断是否是空树集,如果树集不含任何结点,则返回true
public boolean remove(Object o)
,删除树集中的存储参数指定的对象的最小结点,删除成功返回true
,否则返回false
public int size()
,返回树集中结点的数目
- 树映射
- 使用
public V put(K key,V value)
方法添加节点
- 使用
- 自动装箱与拆箱
教材学习中的问题和解决过程
- 问题1:LinkedList链表和ArrayList数组表有什么不同
- 问题1解决方案:通过ArrayList和LinkedList的区别明白二者的区别
代码托管
学习心得
- 本章知识点并不是很多,很多内容与数据结构课上所学的可以相结合,理解应用上来说相对前面所学内容较为简单