2020-03-06-Java

1.使用LinkedList

LinkedList在类中的层次关系
【图】


Snipaste_2020-03-06_13-45-34.png

为什么需要LinkedList?
ArrayList可以在任意位置添加元素:尾部追加、中间插入。

每个元素由3个部分组成:有向前指针,有向后指针,元素本身。
LinkedList排列元素:首尾相连,当前项,会链接到上一项,也会链接到下一项。
好处:插入和删除效率非常高。
api:
(1)public boolean add(Object o),向链表尾部追加一个元素
(2)public boolean add(int index,Object o),在指定的位置插入一个元素。(它的插入效率比ArrayList插入元素的效率更高)
(3)public boolean addFirst(Object o),在链表头部增加一个元素
(4)public boolean addlast(Object o),在链表尾部追加一个元素
(5)public boolean clear(),清楚所有元素
(6)public Object remove(int index),删除指定位置的元素
(7)public Object remove(Object o),直接删除元素
(8)public Object get(int index),获取指定位置的元素
【案例1】对图书信息进行管理,完成添加、删除、插入,遍历。
项目结构:


Snipaste_2020-03-06_15-24-43.png

Book.java


Snipaste_2020-03-06_15-38-59.png
Snipaste_2020-03-06_15-39-06.png

MyTest.java


Snipaste_2020-03-06_15-26-14.png

日志:


Snipaste_2020-03-06_15-41-50.png

2.Set接口

与List不一样。
无序不可重复。
实现类:

HashSet:

可以将每一个元素通过HashCode()方法计算出每个对象的hash值,从而保证它的唯一性,也就不重复。因此,后插入的数据可能hash值靠前,所以顺序上不是按照插入集合的顺序,看上去是无序的。
Set的API:
(1)boolean add(Object o),向集合中追加一个元素
(2)int size(),获取集合元素个数
(3)boolean contains(Object o),查找某某元素是否存在,根据hashcode来查找
(4)boolean remove(Object o),移除某某元素。
【案例】证明无序。


Snipaste_2020-03-06_14-15-12.png

【案例】证明不可重复。


Snipaste_2020-03-06_14-16-03.png

TreeSet

可以实现有序的set。
如何实现有序?

(1)自然排序,需要在集合元素定义时实现Comparable接口。

这个接口,告诉集合,如何比较大小?也就是如何排序。
【案例2】实现图书按价格排序显示
步骤:
1)创建Book类,含有3个字段,序号、图书名、价格
2)让Book类实现Comparable接口,实现compareTo(O)方法,表达出排序的逻辑。
3)修改实现Comparable接口,让他支持泛型参数。
【思考】修改价格排序为图书名字排序。
4)建立TreeSet集合,存入3本书,实现按价格排序。
【思考】价格升序和价格降序。
【思考】图书名称升序排列,和降序排序。

项目结构:


Snipaste_2020-03-06_15-28-29.png

Book.java


Snipaste_2020-03-06_15-28-56.png
Snipaste_2020-03-06_15-29-04.png

Snipaste_2020-03-06_15-29-30.png

MyTest.java


Snipaste_2020-03-06_15-30-12.png

日志:
Snipaste_2020-03-06_15-42-52.png

(2)自定义排序

关键点:在初始化TreeSet时,需要传入一个比较器。
比较器是一个比较规则。
【案例】
项目结构:


Snipaste_2020-03-06_15-35-21.png

Book.java


Snipaste_2020-03-06_15-35-58.png
Snipaste_2020-03-06_15-36-07.png

MyTest.java


Snipaste_2020-03-06_15-36-34.png
Snipaste_2020-03-06_15-36-45.png

日志:


Snipaste_2020-03-06_15-42-52.png

3.Map

双列集合,存储数据是按键值对存储。key和 value,
key必须唯一,因此不可重复。
存在于Collection下,Map本身也是一个接口,又分为HashMap和TreeMap
API:
(1)Object put(Object key,Object value),向集合中插入一个元素,不存在的key就插入这个元素,如果已存在,就覆盖这个元素。
(2)void putAll(Map map),一次存入一个Map
(3)Set entrySet(),转成Set数据结构
(4)Set keySet(),把map中所有的key映射成一个Set集合
(5)Collection values(),把map中所有的value映射成一个集合
(6)Object remove(Object key),按照指定的key移除元素
(7)Object get(Object key),按照key获取value
(8)boolean containsKey(Object key),判断有没有某某key存在
(9)boolean containsValue(Object value),判断有没有某某value存在
对于Map的操作,使用HashMap类来实现。
【案例3】使用Map存储图书
项目结构:


Snipaste_2020-03-06_15-37-39.png

Book.java


Snipaste_2020-03-06_15-25-19.png
Snipaste_2020-03-06_15-25-25.png

MyTest.java


Snipaste_2020-03-06_15-39-33.png
Snipaste_2020-03-06_15-39-42.png

日志:


Snipaste_2020-03-06_15-40-14.png

map在找数据时的优势:
如果知道key,如何找到value?
给你一个学号,到Arraylist中找某某学生,是不是要for遍历一遍,才能找出。
map知道可以,就可以找到学生,无序循环。
【作业】
作业1:对所有学生信息使用TreeSet进行存储。按照学生序号排序。选择菜单1表示升序,选择菜单2表示降序。
作业2:使用HashMap存储学生信息,完成增加1个学生,修改1个学生,删除一个学生,查询所有学生的功能。使用4个菜单完成。

你可能感兴趣的:(2020-03-06-Java)