| 
 
| 本帖最后由 小石姐姐 于 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: 可以
 - 迭代器: 可以
 
 
 | 
 |