集合List 和Set(HashSet,LinkedHashSet,等等)

一.List接口
    1.List的特点:
        有序(存和取的顺序一致),有索引,元素可以重复。
        
        增
            void add(int index,E e) :在指定位置添加元素

        删
            E remove(int index): 删除指定位置的元素 并返回被删除的元素
        改
            E set(int index,E e): 将指定位置元素使用新的元素替换掉
        查
            E get(int index): 根据索引获取指定位置元素
            
            
二. 数据结构
    数据结构是计算机存储、组织数据的方式。
    
    数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
    
    通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率
    
    1.堆栈
        特点:先进后出
        
        压栈:
            把数据放入栈
        
        弹栈:
            把数据取出来
            
    
    2.队列
        特点:先进先出
        
    3.数组
        特点:查询快,增删慢。
        
    4.链表
        特点:查询慢,增删快

    5.红黑树:是二叉树的一种
        特点:提高搜索效率
        
三.LinkedList集合
    底层是链表结构(双向链表)
    
        E getFirst() 
          返回此列表的第一个元素。 
        E getLast() 
          返回此列表的最后一个元素。 

        void addFirst(E e) 
          将指定元素插入此列表的开头。 
        void addLast(E e) 
          将指定元素添加到此列表的结尾。 

        E removeFirst() 
          移除并返回此列表的第一个元素。 

        E removeLast() 
          移除并返回此列表的最后一个元素。 
    
        E get(int index);
        
        
        LinkedList集合底层是使用的链表结构实现的,但为什么可以使用索引来操作元素值。
        使用索引是为了提高对集合的查询效率。
        
        
四:Set集合
    特点:无序,无索引,元素唯一
     
    实现类:HashSet  --> 底层hash表结构
        
        
    1.  java.util.Set接口
     无序接口 保证集合中元素的唯一性 不能保证元素存取顺序一致

     Collection中的子接口  Set没有定义特殊的功能 所以 使用的都是Collection中定义的

     HashSet就是Set最主要的一个实现类
       通过哈希表保证存储元素的唯一性,不能保证存取顺序一致

       通过现象研究原理

       原理写到这里:
              HashSet是根据对象的哈希值来确定元素在集合中的存储位置,
              保证元素唯一性的方式依赖于:hashCode与equals方法。
               元素存储的时候
                 会根据元素的hashCode方法算出一个哈希值,代表了元素被存储的位置。
                 若该位置上无其他元素,可以存储到该位置上
                 如果该位置上有相同的哈希值的元素,这个现象叫哈希冲突
                 哈希冲突,再使用该元素的equals方法与该位置上所有的元素进行比较
                 只要有一个结果为true 说明添加的是一个重复元素 不存
                 如果结果都是false,没有重复的元素 存

               哈希表
                    数组+链表
                    JDK8之后  同位置上如果 小于 8个元素 数组+链表      --> 单向链表
                                           超过 8个元素 数组+红黑树  --> 提高对元素的搜索效率

扫描二维码关注公众号,回复: 2192784 查看本文章

               我们一般说对象是否重复 指的是 里面的成员属性是否全部一致
               所以如果我们使用HashSet存储自定义类型的话 那么必须重写hashCode和equals
               使用快捷键    Alt + (Fn)insert 


        
        

        总结:
            HashSet保证元素唯一是跟两个方法有关:hashCode,equals()
            先执行hashCode方法,如果hashCode值相等才会执行equlas();
            
            会先判断两个对象的hashCode值是否相等,
                如果不相等:直接添加元素到集合中
                如果两个对象的hashCode值相等:会使用equals()比较他们的地址值或者属性值。
                    如果equals方法相等(true):不添加
                    如果equals方法不相等(false):添加
        
        
        
        LinkedHashSet集合可以保证元素存和取顺序是一致的。
        
五:可变参数
   JDK1.5之后的新特性  如果多个参数类型一样 就可以使用可变参数形式书写

     修饰符  返回值类型 方法名(数据类型... 变量名)

     等效于

     修饰符  返回值类型 方法名(数据类型[] 变量名)

     可变参数 其实就是一个数组
     
     注意:可变参数后面不能再有其他参数。可变参数之间可以有其他参数
     错误写法:   public static void sum(int... array,String str){  }
    
六:Collections 集合工具类
    - public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。
    
    - public static void shuffle(List<?> list):打乱集合顺序。
    
    - public static <T> void sort(List<T> list):将集合中元素按照默认规则排序(自然排序)。

猜你喜欢

转载自blog.csdn.net/snack_tc_dora/article/details/81070553
今日推荐