A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© agys66 初级黑马   /  2018-11-22 13:04  /  906 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的东西

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马