1:数据结构(重点)
(1)栈
先进后出。
举例:单行道的死胡同
(2)队列
先进先出。
举例:地铁安检
(3)数组
数组是有编号的,从0开始编号,可以获取任意元素。
优点:查询快
缺点:增删慢
(4)链表
链表是有很多个节点组成的。
每个节点又是由两部分组成:数据域和指针域。
优点:增删快
缺点:查询慢
2:List接口的实现类(重点)
(1)List:元素有序,可以重复。
|--ArrayList
底层数据结构是数组,线程不安全。
查询效率高,增删效率低。
|--Vector
底层数据结构是数组,查询效率高,增删效率低。
线程安全。所以,查询效率也低。
|--LinkedList
底层数据结构是链表,线程不安全。
查询效率低,增删效率高。
什么情况下使用哪种集合呢?
如果是用于查询或者遍历数据,那么就使用ArrayList。
如果是用于大量的增删数据,那么就使用LinkedList。
如果涉及到多线程的安全问题,那么就使用Vector。
如果你不能确定情况,那么就使用ArrayList。
(2)ArrayList(重点)
没有特殊方法。就按照Collection或者List中的方法使用即可。
A:ArrayList存储字符串并遍历。
B:ArrayList存储自定义对象并遍历。
(3)Vector
有特殊方法:addElement,elementAt,Enumeration elements
使用:可以和前面讲过的add,get,Iterator iterator方法对应。
其实这就是集合框架对Vector进行的改进,升级。
A:Vector存储字符串并遍历。
B:Vector存储自定义对象并遍历。
(4)LinkedList
有特殊方法:addFirst,addLast,removeFirst,removeLast,getFirst,getLast
A:LinkedList存储字符串并遍历。
B:LinkedList储自定义对象并遍历。
(5)案例
A:去除集合中的重复元素。
字符串
自定义对象。
在ArrayList中的判断底层依据的是equals方法。
B:用LinkedList模拟栈或者队列数据结构。(了解)
java提供了两个类:
栈 Stack
队列 ArrayDeque
3:泛型
(1)直译:广泛的类型。
是一种特殊的类型,它把指定类型的工作推迟代码声明并实例化类或方法的时候进行。
(2)泛型的使用格式:
<数据类型>
(3)泛型的好处:
A:避免了在运行时发生的类型转换异常
B:避免了在使用的时候,遍历的时候的强制转换
C:优化了程序设计
(4)掌握泛型在集合类中的使用。(重点)
在哪些集合类有使用呢?
自己查看API。
(5)泛型的位置(了解)
A:泛型定义在类上
B:泛型定义在方法上
C:泛型定义在接口上
使用泛型好处多,运行时候不出错。
遍历不用强转换,方便程序设计者。
4:Set接口
(1)Set接口特点:元素无序,元素无重复。
(2)Set的实现类HashSet。
A:存储字符串
B:存储自定义对象。
我们假设自定义对象中的同姓名和同年龄的人为同一个人。
如何保证的呢?
重写了hashCode方法和equals方法。
C:HashSet是如何保证元素的唯一性的?(重点)
在每次增加一个元素的时候,会首先去判断这个元素的哈希值
是否和集合中存在的数据的哈希值一致。
如果不一致,那么肯定是不同的元素。就会直接添加。
如果一致,就继续根据equals方法进行判断。
如果equals返回为true,元素就会被认为和集合中有重复元素,不会添加。
(3)案例(重点)
自己用HashSet存储一个自定义对象,并去除重复元素。
重复到底是根据什么判断的,这个条件是可以根据你的需要定义。
传智博客JAVA基础第十八天
最新推荐文章于 2021-03-01 14:03:09 发布