zoukankan      html  css  js  c++  java
  • List,Set,Collections工具类

    # List、Set

        1. 数据结构
            * 栈结构:先进后出
            * 队列结构:先进先出
            * 数组结构:是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。就像是一排出租屋,有100个房间,从001到100每个房间都有固定编号,通过编号就可以快速找到租房子的人。
                * 数组特点:查询快,增删慢。且数组的长度在内存中是固定的,不可改变。存储位置连续
                * 指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,复制到新数组对应索引的位置。
                * 指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复制到新数组对应索引的位置,原数组中指定索引位置元素不复制到新数组中。
            * 链表结构:由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时i动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。常说的链表分为单项链表和双向链表,单项链表每个结点只能指向下一个结点,而双向链表可以指向前一个和下一个结点。
                * 链表特点:
                    * 查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素
                    * 增删元素快:
                        增加元素:只需要修改连接下个元素的地址即可。
                        删除元素:只需要修改连接下个元素的地址即可。
                    * 长度不固定,存储位置不一定连续

        2. List
            1. 特点
                有序(存进去和取出来的顺序一致)
                有索引,方便查询,但是增删元素较慢
                可以存储重复元素
            2. 特有方法(能够使用索引的方法)
                * void add(int index,E e):给指定的位置添加元素
                * E remove(int index):删除指定位置元素,并返回bool类型的删除结果
                * E set(int index,E e):修改指定位置的元素为e,并返回被修改的原数据。
                * E get(int index):获取指定位置元素
            3. ArrayList<T>
                * 使用数组结构,查询快,增删慢
            4. LinckedList<T>
                * 底层是链表结构,查询慢,增删快
                * 可以进行首位操作,所以Lincked有6个特有方法:
                    * addFirst()  addLast()
                    * removeFirst()  removeLast()
                    * getFirst()  getLast()
            5. Vector
                * 底层也是数组结构
                * Vector与ArrayList的区别:
                    * 相同点:
                        底层都是数组结构,特点就是查询块,增删慢
                      不同点:
                        Vector是线程安全的,效率低
                        ArrayList线程不安全的,效率高

        3. Set
            1. HashSet(无序,不可重复,无索引)
                * LinkedHashSet:有序
                * 如何保证Set集合内元素唯一呢?
                    * 依赖两个方法hashCode方法,equals方法
                        先执行hashCode方法,会和集合中的每一个元素的hash值进行比较,如果不同,直接添加
                            如果相同,执行equals方法判断,如果相同,就不添加,如果不同就添加元素

            2. 集合使用的选择:
                允许存储重复元素:
                    是:使用List集合
                        查询多还是增删多
                            查询多:选择ArrayList
                            增删多:选择LinkedList
                            
                        不知道是查询多还是增删多,就使用ArrayList
                            
                            
                    否:使用set集合
                        有序吗?
                            是:选择LinkedHashSet
                            否:选择HashSet
                            
                        不知道是否有序使用HashSet
                        
                  什么都不知道选择ArrayList

                  适当的情况选择适合的容器可以增加我们的代码效率

        4. 可变参数
            定义:
                修饰符 返回值类型 方法名(数据类型... 参数名) {
                    在方法中使用参数参数就可以看做是数组
                }
                
            使用:
                方法名(参数) // 参数可以是0个,也可以是多个
        5. Collections工具类
            * 特点:
                    构造方法私有
                    成员静态
            
            *方法:
                sort(List list):按照自然排序
                sort(List list, Compartor c): 按照比较器进行排序

                自然排序就是按照默认规则由小到大排序(集合内容是可比较的类型)

                比较器排序: 集合中存储的元素的类型实现了Comparable(可比较的)接口
            
                ArrayList<String> list = new ArrayList<>();
                Collections.sort(list, new Compartor() {
                
                    重写方法
                });

  • 相关阅读:
    求二叉树的层次遍历
    求二叉树的先序遍历
    数据结构实验之二叉树一:树的同构
    list列表操作
    汉罗塔问题
    expected an indented block
    42步进阶学习—让你成为优秀的Java大数据科学家!
    MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
    判断浏览器版本
    VisualStudio2012编辑器错误
  • 原文地址:https://www.cnblogs.com/zlnice/p/9439523.html
Copyright © 2011-2022 走看看