A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马