zoukankan      html  css  js  c++  java
  • 11 集合

    1 Collection接口

      常用的方法:

        add(Object e) 确保此 collection 包含指定的元素(可选操作)。

        size(): 获取集合中元素的个数

        remove(Object e): 移除元素

        clear(): 清空集合中元素

        contains(Object e): 判断集合中是否包含指定的元素

        isEmpty(): 判断集合是否为空

        iterator(): 获取集合对应的迭代器。

      元素数组和集合的区别:

       数组:一旦声明了数组长度无法改变,只能保持指定的数据类型,元素的数据类型必须相同,不能混排。

       集合:长度和动态扩容类型可以是任何类型,可以混合使用。

    2 List接口(Collection接口)

      LIst接口存储一组不唯一,有序(插入顺序)的对象。

       ----ArrayList:在内存中存储位置是连续的,线性结构(可变长度的数组),随机访问或遍历效率较高,但插入和删除元素效率较低.

       ----LinkedList:在内存中存储位置是不连续的,链表结构,插入和删除元素时效率较高,但随机访问或遍历效率较低。

    2.1 ArrayList

      ArrayList可以看作可变长度的数组,本质上就是通过数组实现的,在内存中存储空间是连续的。

      优点:随机访问或遍历时效率较高。

      缺点:添加和删除元素时效率较低。

      常用的构造方法

        ArrayList()  构造一个初始容量为 10 的空列表。

        ArrayList(int initialCapacity)  构造一个具有指定初始容量的空列表。

        egCollection list = new ArrayList();

      常用的方法:

        add(Object e):将元素添加到集合中。

          --Object get(int index):获取指定下标位置的元素.

             *在调用add方法添加元素时,该元素会向上转型为Object类型,所有使用get方法获取是返回值为Object

       add(int index, E element) 将指定的元素插入此列表中的指定位置。

       get(int index) 返回此列表中指定位置上的元素。下标从0开始

       addAll(Collection<? extends E> c) 按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。

       set(int index, E element)用指定的元素替代此列表中指定位置上的元素。

       remove(int index)移除此列表中指定位置上的元素。

       remove(Object o) 移除此列表中首次出现的指定元素(如果存在)。

      泛型:限定集合中元素的类型。一旦对集合使用泛型,该集合中能容纳的元素类型就固定了。

       语法:List<E> list = new ArrayList<E>();  E为数据类型

       优点:1)可以避免强制转换

               2)可以消除黄色的警告。

    2.2 LinkedList

      LinkedList: 采用的链表结构进行存储,在内存中存储位置是不连续的,插入和删除元素时效率较高,但随机访问或遍历效率较低。

      优点:添加和删除元素是效率较高

      缺点:随机访问或遍历时效率较低。

      常用方法:

       add(Object o):将指定元素添加到此列表的结尾。

       add(int index, E element)在此列表中指定的位置插入指定的元素。

       addFirst(E e) 将指定元素插入此列表的开头。(LinkedList特有的)

       addLast(E e)将指定元素添加到此列表的结尾。(LinkedList特有的)

       getFirst() 返回此列表的第一个元素。

       getLast() 返回此列表的最后一个元素。

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

       removeLast() 移除并返回此列表的最后一个元素。

    2.3 Vector

         Vector类似与ArrayList的线性结构,Vector是基于线程安全的,在多线程中使用;ArrayList是非线程安全的,效率较高。

    2.4 Stack/Quence

      StackLIFO/FILO:后进先出(Last In First Out),先进后出(First In Last Out)

      ---类似于玩具枪的弹夹,第一个压进去的子弹最后一个弹出

      ---入栈(压栈):将元素添加到栈中。

      ---出栈(弹栈):将元素从栈的顶部移除。

      Quence队列FIFO:先进先出(First In First Out)

    2.5 Iterator接口

      java.util.Iterator接口:对 collection 进行迭代的迭代器。

        boolean hasNext()   如果仍有元素可以迭代,则返回 true

        next() 返回迭代的下一个元素。

      使用迭代器进行遍历:

      Iterator<String> iter = list.iterator();

      while(iter.hasNext()){

      String str = iter.next();

      System.out.println(str);

      }

    3 Set接口(Collection接口)

      Set接口: 无序,唯一(不重复)

    3.1HashSet

      HashSet:采用哈希表(散列表)的方式存储。

      优点:查询,添加,删除效率较高

      缺点:无序(添加顺序)

      常用的构造方法:

       HashSet()  构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75

       HashSet(int initialCapacity) 构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)。

      常用的方法:

       add(E e)如果此 set 中尚未包含指定元素,则添加指定元素。

       clear() 从此 set 中移除所有元素。

       contains(Object o) 如果此 set 包含指定元素,则返回 true

       iterator()  返回对此 set 中元素进行迭代的迭代器。

       size()返回此 set 中的元素的数量(set 的容量)。

       remove(Object o)如果指定元素存在于此 set 中,则将其移除。

      HashSet如何保证其元素的唯一性?

      在添加元素时调用hashCode()获取元素的哈希码,判断要添加元素的哈希码是否相同,如果相同调用equals方法比较内容是否相同;如果哈希码不相同,equals方法将不再调用。

      如果equals相同,hash码肯定相同;hash码相同,equals结果不一定相同。

    3.2 LinkedHashSet

      LinkedHashSet继承了HashSet,采用的是哈希码+链表的结构进行存储,其中的元素有序(添加顺序)

      常用的构造方法

        LinkedHashSet() 构造一个带默认初始容量 (16) 和加载因子 (0.75) 的新空链接哈希 set

        LinkedHashSet(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的新空链接哈希 set

      常用的方法:

        add(Object a):添加元素

        remove(Object a):移除指定的元素

        contains(Object a):是否包含指定的元素

        size():获取元素的个数。

        iterator():返回一个迭代器

    3.3 TreeSet

      TreeSet:采用二叉树的方式进行存储,其中元素有序(大小顺序)。要添加元素是必须实现Comparable接口或传入一个比较器(需要实现Comparator接口)。

      原理:当向TreeSet容器添加元素时,会将当前元素的值与根节点/父节点的值进行比较,

        如果比根节点/父节点的值大,保存在右子节点上;

        如果比根节点/父节点的值小,保存在左子节点上。

      优点:有序,查询速度比List要快(折半查找)

      常用的构造方法:

        TreeSet()  构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。插入该 set 的所有元素都必须实现 Comparable接口

        TreeSet(Comparator<? super E> comparator) 构造一个新的空 TreeSet,它根据指定比较器进行排序。

           常用的方法:

        add(Object o): 添加元素

        remove(Object o): 移除元素

        contains(Object o): 如果此 set 包含指定的元素,则返回 true

        size(): 返回 set 中的元素数(set 的容量)。

        iterator():返 回在此 set 中的元素上按升序进行迭代的迭代器

    示例:在实现 Comparable接口时重写compareTo方法

      public class Student implements Comparable<Student>

      * 定义比较规则:

        比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数

      @Override

      public int compareTo(Student o) {

        // if(age>o.age){

        // return 1;

        // }else if(age==o.age){

        // return 0;

        // }else{

        // return -1;

        // }

        return age-o.age;

      }

    4 Map接口

      Map接口并不是Collection接口的子接口,Map接口采用的键值对方式进行存储数据,提供keyvalue的映射。无序

    4.1 HashMap

      HashMap:基于哈希表的 Map 接口的实现。

      常用的构造方法:

         HashMap() 构造一个具有默认初始容量 (16) 和默认加载因子(0.75) 的空HashMap

            HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap

      常用方法:

         put(K key, V value) 在此映射中关联指定值与指定键。

         get(Object key) 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null

         size() 返回此映射中的键-值映射关系数。

         remove(Object key) 从此映射中移除指定键的映射关系(如果存在)。

         clear() 从此映射中移除所有映射关系。

         containsKey(Object key)  如果此映射包含对于指定键的映射关系,则返回 true

         containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true

    4.2 Hashtable

      HashtableHashMap类似,不同之处主要是以下两点:

      1HashMap是非线程安全的,而Hashtable是线程安全的

      2HashMap中的键和值都运行为null,Hashtable不允许。

    4.3 LinkedHashMap

      java.util.LinkedHashMap:哈希表+链表结构,有序(添加顺序),继承了HashMap类。

      常用的构造方法:

        LinkedHashMap() 构造一个带默认初始容量 (16) 和加载因子 (0.75) 的空插入顺序 LinkedHashMap 实例

        LinkedHashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空插入顺序 LinkedHashMap 实例。

      常用的方法:

        put(K key, V value) 在此映射中关联指定值与指定键。

        get(Object key) 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null

        size() 返回此映射中的键-值映射关系数。

           remove(Object key) 从此映射中移除指定键的映射关系(如果存在)。

        clear() 从此映射中移除所有映射关系。

        containsKey(Object key)  如果此映射包含对于指定键的映射关系,则返回 true

        containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true

      * Set<K> keySet() 返回此映射中所包含的键的 Set 视图。

      * Set<Map.Entry<K,V>> entrySet() 返回此映射所包含的映射关系的 Set 视图。

    4.4 TreeMap

      TreeMap采用二叉树的方式存储,与TreeSet类似。其中的元素有序(大小顺序)

      要求添加的元素必须是可比较大小

       1)实现Comparable接口

       2)创建一个比较器(实现Comparator接口)

      在添加元素时根据键的自然顺序进行存储数据。

      常用的构造函数:

        TreeMap() 使用键的自然顺序构造一个新的、空的树映射。 插入该映射的所有键都必须实现 Comparable 接口.

        TreeMap(Comparator<? super K> comparator)   构造一个新的、空的树映射,该映射根据给定比较器进行排序。

    5 Collections

      Collections类是一个对Collection集合进行操作的工具类型,其中提供一些静态的工具方法方便操作。

      CollectionCollections的区别:

       1 CollectionListSet的父接口,而Collections是操作Collection集合的工具类。

       2Collections(Collection集合进行操作的工具类),类似Arrays(对数组进行操作的工具类),提供了若干个静态的方法以方便操作集合。

      常用的方法:

         addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。

         sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。

         reverse(List<?> list)反转指定列表中元素的顺序。

         max(Collection<? extends T> coll) 根据元素的自然顺序,返回给定 collection 的最大元素。

         min(Collection<? extends T> coll) 根据元素的自然顺序 返回给定 collection 的最小元素。

         binarySearch(List<? extends Comparable<? super T>> list, T key) 使用二分搜索法搜索指定列表,以获得指定对象,必须根据列表元素的自然顺序对列表进行升序排序

      egCollections.sort(list);  //排序,默认按照升序进行排列

        Collections.reverse(list);  //反转:倒序输出

        int index = Collections.binarySearch(list, 9);  //二分查找:待查找的集合中元素必须有大小顺序

  • 相关阅读:
    AVPlayer中的问题
    封装网络请求
    FMDB的使用方法
    设置UITextField占位符的颜色和字体
    SQL SERVER性能优化综述
    关于学习
    学习java中对《类与对象》的认知
    Felling1-java
    关于学习JAVA第二章的心得
    学习JAVA第一章的心得
  • 原文地址:https://www.cnblogs.com/nicepanda/p/7045568.html
Copyright © 2011-2022 走看看