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() {
            
                重写方法
            });
node

相关文章
相关标签/搜索