Collections集合: 
1.1数据结构 
 
         栈: 
           特点: 
                 1.只能在一端进行元素的添加和删除  
                 2.先进后出 
         队列: 
           特点: 
                 1.先进先出 
                 2.入口和出口分别再两端 
         数组:  (ArrayList底层是数组的实现) 
           特点: 
                 1.增删慢(长度不可变) 
                 2.查询快(元素有对应的索,是一片连续的内存空间) 
         链表: 
           特点: 
                 1.每个元素都是一个对象,对象中包含有元素数据,指针,每个元素之间通过指针相连 
                 2.增删快,查询慢 
           * 双向链表相对单向查询会稍微快一点 
         红黑树: 
           特点: 
                 1.趋近于平衡树,查询速度非常快,查询叶子节点最大和最小次数不能超过2倍。 
           名词解释: 
                 二叉树:分支不超过两个 
                 查找树/排序树:是一个有序的二叉树(左子树小于节点,右子数大于节点)左中右,则是从小到大 
                 平衡数:左右子数高度差不超过1 
                 红黑树:趋近于平衡树,查询速度非常快。 
 
1.2 java.util.List 
 
          概述: 
 
                
 
 
 
          List中的特有功能 
               void add(int index,E element):仔指定索引位置添加元素 
               E remove(int index):删除指定索引位置的元素,把被删除的元素返回 
               E set(int index,E element):修改指定索引位置的元素为指定值,把被修改的元素返回 
               E get(int index):获取指定索引位置的元素 
 
java.util.LinkedList集合inmlements List接口 
 
   LinkedList集合的特点:(可以模拟栈和队列) 
 
           1.底层是一个链表结构:查询慢,增删快 
 
           2.里边包含了大量操作首尾元素的方法 
 
          *注意:使用LinkedList集合特有的方法,不能使用多态 
 
*当对集合种增删操作比较多是时候,推荐使用LikedList 
 
*当对集合种查询操作比较多是时候,推荐使用ArrayList 
 
   Vector: 
 
       和ArrayList实现功能是一致的(底层也是数组的实现) 
 
       唯一的区别:ArrayList是不同步的(效率高,安全性低) 
 
                   Vector是同步的(效率低,安全性高)       
 
java.util.Set接口extends Collection接口 
 
     Set接口的特点: 
 
           1.不允许储存重复的元素 
 
           2.没有索引,没有带索引的方法,也不能使用普通for循环遍历 
 
java.util.HashSet集合 implements Set接口 
 
     HashSet特点:(底层是hash表的实现,查询的效率非常高) 
 
           1.不允许储存重复的元素 
 
           2.没有索引。没有带索引的方法,也不能使用普通的for循环遍历 
 
           3.是一个无需的集合,存储元素和取出元素可以不一致 
 
           4. 
 
     哈希值: 
        默认情况:根据对象的物理地址算出来的一个十进制的整数,由系统随机给出(相当于是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是物理地址) 
     本质:数组(储存了链表的数组),数组中的元素是一个个的链表 
     
     Object类中有一个可以返回哈希值的方法 
     int hashCode()//返回该对象的哈希码值 
     hashCode方法的源码: 
           public native int hashCode(); 
           native:代表该方法调用的是本地操作系统的方法 
     HashSet的储存原理: 
           通过hash Code方法确定索引位置 
           在通过equals方法去除重复元素 
     
     总结: 
         储存元素的操作 
         1.想获取对象的hash值去储存元素 
             1.1hash值不一样,直接储存 
             1.2hash值一样 
                则比较equals的返回值, 
                    如果是true则认为元素重复 
                    如果是fals,则认为元素不重复,则添加元素 
     
     * 当我们用HashSet存储自定义对象的时候,如果想保证元素的唯一性,则需要重写hashCode和equals方法 
     
     问题:没有办法去重复 
     解决办法:重写hashCode方法,让hashCode的返回值和地址值不相干,跟属性值相关 
     
     LinkedHashSet:本质就是一个有序的HashSet: hash表+链表实现 
          hash表用于存储元素, 
          链表用于记录元素存储的顺序,当我们获取元素的时候,则会通过链表记录的顺序去获取元素。 
 
2.可变参数 
 
      一种特殊的参数类型。可以接受任意多个同种数据类型的数据或者数组 
1.1  Map集合的特点: 
 
        1.Map集合是一个双列结合,一个元素包含两个值(一个key,一个value) 
 
        2.Map集合中,key不可以重复的,value可以重复的。 
 
        3.Map集合中,可以通过key可以找到对应的值(value) 
 
1.2  Map的实现类: 
 
        HashMap: 底层是哈希表的实现(HashMap中的键其实就是HashSet) 
 
                LinkedHashMap:HashMap的子类, 就是一个有序的HashMap 
 
        Hashtable: 
 
                Properties:可以方便和IO流相结合来使用 
 
1.3 比较: 
 
        Hashtable是同步的,不允许null键和null值 
 
        HashMap是不同步的,允许null键和null值,但是null键只能出现一次 
 
1.4: Map的使用功能: 
 
        V put(K k,V v):put方法添加元素,如果键不存在,直接添加,put方法返回null。如果键已经存在,由于不能 
 
        重复,会将新的值替换旧的值再将旧的值返回。                                                              
 
        V remove(K k)按照给定的键删除整个键值对,并且返回被删除的值 
 
        V get(Object key)获取指定键对应的值(通过键获取值) 
 
        boolean containsKey(Object key) 判断指定的键是否存在 
 
        boolean containsValue(Object Value) 判断指定的值是否存在         
 
1. 5:遍历功能: 
   Set<K> KeySet()  获取包含所有键的set集合        其实HashMap中的键就相当于一个HashSet(键找值) 
   Set<Map.Entry<K,V>> entrySet()  获取包含所有键值对元素(Entry)的Set集合 
 
1.6用HashMap存储自定义对象: 
 
        由于HashMap中的键相当于一个HashSet,所以当HashMap中的键是自定义类型的时候,则需要重写 
 
        hashCode和equale方法,以保证键的唯一性 
 
        其实使用HashSet存储元素的时候,底层是吧元素存Map中的键里面 
 
2.0 JDK9的新特性: 
 
        2.1 添加元素到集合的of方法: 
 
                在List,Map,Set接口中定义了一些重载的静态方法of可以实现将多个元素添加到集合中 
 
                注意事项: 
 
                        1.只能使用接口类型调用这些静态方法,实现类去调用则不可以 
 
                        2.使用of方法将元素添加到集合中后,元素不能改变 
 
                        3.Map/Set接口中不允许出现重复的键/元素,如果有重复,则会抛出异常 
 
 
 
3.0 Debug用IDEA找出bug的东西 
 |   
        
 
    
    
    
     
 
 |