黑马程序员技术交流社区

标题: [石家庄校区]就业班JavaSE高级部分day03List Set [打印本页]

作者: 湿漉漉的文字控    时间: 2018-11-20 15:48
标题: [石家庄校区]就业班JavaSE高级部分day03List Set
就业班JavaSE高级部分day03List Set

数据结构_栈:
特点: 先进后出 (FILO, First In Last Out)
  入口和出口在同一侧
入栈(压栈):  将元素存入栈
出栈(弹栈):  从栈中取出元素
数据结构_队列:
特点: 先进先出 (FIFO, First In First Out)
入口和出口在两端
适用场景: 秒杀, 抢购
                 在线售票
                 处理高并发场景
数据结构_数组:
查询快,增删慢
数据结构_链表:
查询慢,增删快
C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7VjkOlFOSrTPAb-ROkG2i_vds/dbaceda4bb5b418fb20152423277e1b9/da8a3236f18944beabc811df8443ae78.jpg

List接口特点:
1. 有序集合,存储元素和取出元素的顺序是一致的(存123,取123)
2. 有索引,包含一些有索引的方法
3. 允许存储重复元素
C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7VjkOlFOSrTPAb-ROkG2i_vds/95ba7f19a925485087d34275ce70e8fb/d77c312182834c149820e3b27752f47d.jpg

C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7VjkOlFOSrTPAb-ROkG2i_vds/eb5a067ad8484972b5ecb152c2010936/9f515adc901e4c8e832bff954b072877.jpg
ArrayList特点:
1. 底层数据类型: 数组
线程不安全,效率高
查询快
增删慢
linkedList集合特点:
1. 底层结构: 列表
2. 查询慢,增删快
3. 线程不安全,效率高
4. 包含大量操作首尾元素的方法
注意: 不能使用多态
Set接口特点:
1. 不允许存储重复元素
2. 没有索引,不能使用for循环
HashSet集合特点:
1. 继承Set方法
2. 不允许存储重复元素
3. 有索引,不能使用普通or循环(能使用迭代器和增强for循环)
4. 无序集合,存取元素的顺序可能不一样
5. 底层是哈希表结构(查询速度非常快)
哈希值:
一个十进制数值,系统随机给出,是通过将该对象的内部地址模拟出来的整数来实现
C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7VjkOlFOSrTPAb-ROkG2i_vds/a0fb16655d164d09b7f7e185db86a222/60405357acd746c793d8bb7daf68af95.jpg
HashSet图解:
C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7VjkOlFOSrTPAb-ROkG2i_vds/b6ddc6cffafe402bb8b0911c21496877/07e6223b452844688f6a8ffa9a4990f2.jpg
HashSet集合存储元素不重复的原理:
C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7VjkOlFOSrTPAb-ROkG2i_vds/351d60ecbaba42d6a359c8f8be4ddb55/92cae5b1e5d245c795c0db8d11a79dcb.jpg
LinkedHashSet集合:
LinkedHashSet特点:
1. 元素存取有序 (存入和取出顺序一致)
        2. 元素不可重复
        3. 没有索引
       
LinkedHashSet底层数据结构:
        哈希表 + 链表   (也就是: 数组 + 链表或红黑树 + 链表)
        其中, 哈希表用于存储数据, 额外的链表用于记录元素添加时的先后顺序,
        以便在获取元素时保持顺序一致
什么时候用List, 什么时候用Set?
要存储的元素可以重复的, 用List集合:
                增删少, 用ArrayList
                增删多, 用LinkedList
        要存储的数据要求不重复, 或者相对一个集合去重, 用Set集合:
                不要求存取顺序一致, 用HashSet
                要求存取顺序一致, 用LinkedHashSet
可变参数:
        JDK 5 出现. 指同一个类型的参数, "个数可变"
        可变参数的本质就是一个"数组"

        格式: 用在方法的参数中
            修饰符 返回值类型 方法名(int... 变量名) {
                    // 可以直接将 变量名 当作 数组名 使用
            }
            方法名();

注意事项:
        1. 可变参数可以传递的参数个数, 可以是 0个, 1个, 多个
        2. 一个方法的参数列表中, 只能有一个可变参数
        3. 如果方法的参数有多个, 可变参数必须写在参数列表的最后
java.util.Collections类: 操作集合的工具类
        // 静态方法
        static <T> boolean addAll(Collection<? super T> c, T... elements):往集合中添加一些元素
        static void shuffle(List<?> list): 打乱集合顺序
        static <T> void sort(List<T> list): 将集合中元素按照默认规则排序
        static <T> void sort(List<T> list,Comparator<? super T> c):将集合中元素按照指定规则排序

sort(List<T> list): 默认按照"升序"将元素排序
        数字, 字母, 都可以按照升序排序
自定义JavaBean对象默认不能排序, 因为不知道如何比较哪个对象大, 哪个对象小
自定义JavaBean对象要想排序, 需要实现 Comparable<E> 接口, 重写 int compareTo(E e) 方法
        规则:
                this-参数: 升序(从小到大)
                参数-this: 降序(从大到小)
Collections集合工具类: sort(List<T> list,Comparator<? super T> ):
Comparable接口和Comparator接口区别
        Comparable: 让JavaBean自身具有可比较性 (自己和其他人比)
        Comparator: 定义一个比较器类, 用比较器对象比 (让第三个人来帮两个人比较)

Comparator使用方式:
        1. 定义类实现Comparator<E>接口, 重写 int compare(E o1, E o2) 方法, 泛型为比较元素的类型
                规则:
            o1-o2: 升序(从小到大)
            o2-o1: 降序(从大到小)
        2. 在Collections.sort(List<T> list,Comparator<? super T> c)方法中传入自定义比较器对象







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2