黑马程序员技术交流社区

标题: 【石家庄校区】就业班_JavaSE_day06-day07_集合 [打印本页]

作者: 风中的消逝    时间: 2018-4-14 11:25
标题: 【石家庄校区】就业班_JavaSE_day06-day07_集合
本帖最后由 风中的消逝 于 2018-4-23 15:11 编辑

【石家庄校区】就业班_JavaSE_day06-day07_集合


一 Collection
                1 根接口
                2 子接口 List  Set
                3.方法
                增删   
                boolean add(E e)  添加一个元素
                boolean addAll(Collection<? extends E> c) 添加全部
                boolean remove(Object o) 删除某元素
                boolean removeAll(Collection<?> c) 把二个集合相同的元素删除,作用于前面的调用的集合
                void clear()
                boolean retainAll(Collection<?> c)  把二个集合不同的元素删除,作用于前面的调用的集合
                遍历
                Iterator<E> iterator() 迭代器遍历
                判断
                boolean isEmpty()
                boolean contains(Object o)  包含某个元素
                boolean containsAll(Collection<?> c) 包含全部 返回是否包含全部
                长度
                int size()
               
二 Iterator 迭代器接口   
       迭代器相当于集合的一个副本,在迭代的时候如果集合的长度发生改变,则会报并发修改异常 (ConcurrentModificationException)  
           hasNext()
           next()
           remove()
        ListIterator 列表迭代器接口
           add()
      使用注意:对集合的增删操作要么都用迭代器完成,要么都用集合自身的方法完成。这样可以避免并发修改异常。

                        
三 Set
             1.接口 extends Collection
             2.特点  无序(元素放进去和拿出来的顺序不一致)  不重复  
        3.实现类
           HashSet  底层数据结构是哈希表   (无序 不重复)
           TreeSet   底层数据结构是红黑树    (可以对集合排序,不重复)
           LinkedHashSet   底层数据结构是链表 + 哈希表   (有序,不重复)
           哈希表:数组和链表的优点集合。类似于字典 字典的索引相当于数组  每页的内容相当于链表
           红黑树:自平衡二叉树  左边 < 中间 < 右边

           HashSet 怎样保证元素的不重复  通过元素的hashcode和equals方式来判断是否是同一元素
           TreeSet  怎样保证元素有序和不重复。 有二中方式:
           1.自然排序  元素要实现comparable接口并重写compareTo方法。 像Integer 、String 这些已经实现了该接口
           2.比较器      通过带参数构造方式传入比较器对象 来比较元素。通常采用匿名内部类。
         4. 方法
         没有特殊方法,与Collect方法相同

四 List
          1.接口 extends Collection
          2.特点  有序(元素放进去和拿出来的顺序一致)  可以重复
          3.实现类
                  ArrayList 底层数据结构是数组  查询块,增删慢   线程不安全,效率高
                  LinkedList  底层数据结构是链表  查询慢, 增删块 线程不安全,效率高
                  LinkedList 有一些特殊方法(Frist和Last)
                  void addFirst(E e)  void addLast(E e)  
                   E getFirst()   E getLast()  
                   E removeFirst()  E removeLast()  
                  Vector    底层数据结构是数组   查询快,增删慢,线程安全,效率低   不常用
          4 方法
          有特殊方法,带index索引的特殊方法
          void add(int index, E element)
          boolean addAll(int index,  Collection<? extends E> c)
          E get(int index)
          int indexOf(Object o)
          int lastIndexOf(Object o)
          E remove(int index)
          E set(int index,      E element)

五 Map
       1 Map与Collection区别
           map存储的是二列, collection存储的是一列
           map中的key不能重复,collection的set  不能重复
           map是以key作为底层数据结构  collection是以元素作为底层数据结构
       2 Map方法
           添加功能
           V put(K key, V value)
           如果key是第一次添加则返回null 如果key是第二次添加,则把以前的value替换,并将被替换的value返回。
           所以说put除了添加还有替换的功能
           删除功能
           void clear()  全部清空
           V remove(Object key)   根据key删除, 返回被删除键值对的value
           判断功能
           boolean containsKey(Object key)  是否包含key
           boolean containsValue(Object value)  是否包含value
           boolean isEmpty()  是否为空
           获取   二种遍历方式
           1.Set<Map.Entry<K,V>> entrySet()  获取键值对set   然后通过getKey和getvalue方法获取key和value
           2.Set<K> keySet()  获取所有key   V get(Object key)   根据key获取value
           Collection<V> values() 获取所有value
           长度功能
           int size()
        3.实现类
           HashMap   key的存储和取出顺序 无序。
           LinkedHashMap key有序的hashmap key的存储和取出顺序 有序。
           TreeMap   大小顺序有序
            HashMap和Hashtable的区别
            HashMap是线程不安全的,key和value允许为空
            Hashtable是线程安全的,  key和value不允许为空

六 Collections 工具类
      binarySearch(List,obj) list必须先有序才行
      copy(dest,src) 赋值是 dest的size 要大于等于src的size
      fill(list,obj)
      reverse()
      sort(list) 自然排序 comparable compareTo()
      shuffle() 混排

七 泛型
    定义在类上、定义在接口上。class A<T>{}  interface<T>{}
    不能定义 class A<? extend T> {} 或者 class A<? super T>
    接口类似。因为? extend T 类型不确定。
    定义在方法形参上 或者 方法的返回值上。
    method(T t)  <A> void method( A a) <T> void method<T t>
    方法可以用类上或接口上定义的类型。也可以自定义类型。
    另外方法的形参和返回值 可以使用<? extend T>  这个的目的是方便代码重构。

八 增加for
    Iterable 接口 增强for接口  底层实现原理就是迭代器 只能用来遍历

九 数据结构
     数组  查询快  增删慢  连续内存空间
     链表  查询慢   增删快  不连续内存空间
     栈    先进后出
     队列  先进先出

十 可变参数 ...
     相当于数组。可以通过遍历数组都到参数。

                  







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2