本帖最后由 小石姐姐 于 2018-11-22 09:29 编辑
数据结构:栈 队列 数组 链表 红黑树
栈的特点:单口,出口入口在同一侧,先进后出,(入栈/压栈,出栈/弹栈 )
队列的特点:入口和出口在两端,先进先出.(FIFO, First In First Out)
适用场景:秒杀,抢票,处理高并发场景.
数组(Array)的特点:查询快,增删慢 是一个连续的空间
适用场景:适用于查询多,增删少的场景,
链表:查询慢,增删快.
适用场景:查询少,增删多的场景
红黑树:查询快,增删快.是一种平衡 ,二叉,查找树.
适用于场景:查询和增删都有, 需要元素自动排序的场景.
List的常用方法:
List集合体系的特点: (1),存取有序,存入和取出的元素顺序一致,排序是从小到大.
(2)元素可以重复 (3) 有索引
Arraylist集合的特点:
(1)底层的数据结构是数组.
(2)特点是查询快,增删慢,线程不安全,效率高.
LinkedList集合的特点和特有的方法:
(1)底层的数据结构是链表,
(2)查询慢,增删快,线程不安全,效率高.
特有的成员方法:
addFirst:将指定元素插入此列表的开头.
addLast;将指定元素插入此列表的结尾.
getFirst:获取返回此列表的第一个元素.
getLast:获取返回此列表的最后一个元素.
removeFirst:移除并返回此列表的第一个元素.
removeLast(): 移除并返回此列表的最后一个元素
Vector集合:
Vector底层的数据结构:
数组
Vector的特点:
查询慢
增删快
(同步)线程安全, 效率低 (已经淘汰不用了)
Set集合体系;
Set集合体系特点;(1)元素不可重复(2)没有索引
HashSet特点;(1)元素不可重复(2)元素没有索引(3)元素存取无序
(4)底层采用哈希表结构: 哈希表=数组+链表或红黑树.
ava.util.HashSet类:
常用方法
boolean add(E e): 添加元素, 根据元素的 hashCode() 和 equals() 方法判断是否重复. 重复则不添加并返回false, 不重复则添加并返回true
哈希表的特点:
哈希表 = 数组 + 链表/红黑树
去重:
add() 先使用hashCode()方法计算哈希值, 判断哈希值是否有重复
如果没有重复的, 说明没有重复, 直接添加
如果有重复的哈希值, 是哈希冲突, 继续使用元素的equals()方法来判断是否重复
如果 equals()判断全都不一样, 说明不重复, 可以添加
如果 equals()判断有重复的, 说明重复, 不能添加
使用HashSet集合存储自定义元素:
HashSet: 去重
自定义元素要重写 hashCode() equals()方法
可变参数的格式:
方法名(数据类型......变量名){
当做数组来使用
}
注意事项:参数列表中只能有1个可变参数
放在列表的最后
传递参数的个数0~n个
集合工具类:
Collection类:static boolean addAll(Collection c, T... t)
static void shuffle(List list)
static void sort(List list): 元素实现Comparable接口
static void sort(List list, Comparator c)
使用Comparator比较器进行排序
1. 定义实现类实现Comparator接口, 重写 int compare(E o1, E o2)
规则:
o1-o2 升序
o2-o1 降序
2. 创建实现类对象, 传递到 static void sort(List list, Comparator c) 方法中
单列集合体系:
Collection接口: 单列集合的根接口, 规定了公共的功能
|
|_ List接口: 元素存取有序, 可重复, 有索引
| |_ Vector类: 底层数组, 有索引, 内存空间连续分配, 查询快, 增删慢, 线程安全, 效率低
| |_ ArrayList类: 底层数组, 有索引, 内存空间连续分配, 查询快, 增删慢, 线程不安全, 效率高
| |_ LinkedList类: 底层链表, 查询慢, 增删快
| |_ 遍历
| - toArray(): 可以
| - 普通for: 可以
| - 增强for: 可以
| - 迭代器: 可以
|
|_ Set接口: 元素不可重复, 无索引
|_ HashSet类: 底层哈希表, 元素无序, 元素不可重复(用hashCode()和equals()方法来判断)
| |_ LinkedHashSet类: 哈希表+链表, 同时具有HashSet的元素不重复, 链表存取有序的特点
|
|_ TreeSet类: 底层红黑树结构(存入元素时就会按照元素自然顺序排序).
|
|_ 遍历
- toArray(): 可以
- 普通for: 不可以, 没有索引, 不能用!
- 增强for: 可以
- 迭代器: 可以
|
|