集合框架

一、集合框架的分类:

  1 Collection(单列集合)

      1 List --> 有序,可重复 

        1 ArrayList

          底层结构数组,查询块,增删慢

          线程不安全,效率高。

        2 LinkedList
          底层结构链表,查询慢,增删块

          线程不安全,效率高。

      2 Set --> 无序,不可重复(唯一)

        1 HashSet 

          底层结构哈希表。

          哈希表依赖两个方法:一个是HashCode(),一个是equals()。

          首先执行HashCode(),判断值是否相同,

            是:继续执行equals(),判断返回值,

              true:说明元素已经存在。

              false:直接添加到集合中。

            否:直接添加到集合中。

          最终:自动生成HashCode()和equals()即可。

          LinkedHashSet:

            底层数据结构由链表和哈希表组成。链表保证元素有序。哈希表保证元素唯一。

        2 TreeSet

          底层数据结构是红黑树。(是一种自平衡的二叉树)

          如何保证数据唯一:

            根据比较的返回值是否是0来决定。

          如何保证数据有序:

            两种方式:

              自然排序(元素具备比较性):

                让元素所属的类实现Comparable接口。

              比较器排序(集合具备比较性):

                让集合接收一个Comparator的实现类对象。

  2 Map(双列集合)

      Map集合数据结构仅仅针对键有效,与值无关。

      1 HashMap:       

        底层结构哈希表。线程不安全,效率高。

          哈希表依赖两个方法:一个是HashCode(),一个是equals()。

          首先执行HashCode(),判断值是否相同,

            是:继续执行equals(),判断返回值,

              true:说明元素已经存在。

              false:直接添加到集合中。

            否:直接添加到集合中。

          最终:自动生成HashCode()和equals()即可。

        LinkedHashMap:

            底层数据结构由链表和哈希表组成。链表保证元素有序。哈希表保证元素唯一。

      2 HashTable:

        底层结构哈希表。线程安全,效率低。

          哈希表依赖两个方法:一个是HashCode(),一个是equals()。

          首先执行HashCode(),判断值是否相同,

            是:继续执行equals(),判断返回值,

              true:说明元素已经存在。

              false:直接添加到集合中。

            否:直接添加到集合中。

          最终:自动生成HashCode()和equals()即可。

      3 TreeMap:

        底层数据结构是红黑树。(是一种自平衡的二叉树)

        如何保证数据唯一:

          根据比较的返回值是否是0来决定。

        如何保证数据有序:

          两种方式:

            自然排序(元素具备比较性):

              让元素所属的类实现Comparable接口。

            比较器排序(集合具备比较性):

              让集合接收一个Comparator的实现类对象。

二、集合框架的使用选择:

  对象是否是键值对:

    是:Map

    否:是否需要排序:

      是:Set

      否:List,查询多还是增删多:

        查询多:ArrayList

        增删多:LinkedList

  总结:其实还是根据实际情况和集合的特点来进行选择。

三、Collections工具类:

  Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化(将非同步的集合转换成同步的)等操作。

  常用的方法有:

  

static <T> boolean addAll(Collection<? super T> c, T... elements) //将所有指定的元素添加到指定的集合中。  
static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) //使用二进制搜索算法搜索指定对象的指定列表。  
static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) //使用二进制搜索算法搜索指定对象的指定列表。  
static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s, 类<E> type) //返回一个动态类型安全的查看指定的排序设置。  
static <T> void copy(List<? super T> dest, List<? extends T> src) //将所有的元素从一个列表复制到另一个列表中。  
static <T> Set<T> emptySet() //返回一个空集(不可变)。  
static <T> Enumeration<T> enumeration(Collection<T> c) //返回指定集合的枚举数。  
static <T> void fill(List<? super T> list, T obj) //用指定元素替换指定列表的所有元素。  
static int indexOfSubList(List<?> source, List<?> target) //返回指定的源列表中指定的目标列表的第一个发生的起始位置,或-如果没有这样的发生,则- 1。  
static int lastIndexOfSubList(List<?> source, List<?> target)//返回指定的源列表中指定的目标列表的最后一个发生的起始位置,或-如果没有这样的发生,则- 1。  
static <T> ArrayList<T> list(Enumeration<T> e) //返回一个数组列表,该列表包含在返回的顺序中由枚举返回的元素的元素。  
static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) //返回最大元素的集合,根据其元素的自然排序。  
static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) //返回给定集合的最大元素,根据指定的比较器诱导的顺序。  
static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)  //返回最小的元素的集合,根据其元素的自然排序。  
static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp) //返回给定集合的最小元素,根据指定的比较器诱导的顺序。  
static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) //将列表中的某一特定值的所有出现替换为另一个。  
static void reverse(List<?> list) //反转指定列表中元素的顺序。  
static <T> Comparator<T> reverseOrder() //返回一个比较器,对一系列的实施 Comparable界面对象的自然顺序相反。  
static <T> Comparator<T> reverseOrder(Comparator<T> cmp) //返回一个对指定比较器的反向排序的比较器。  
static void rotate(List<?> list, int distance) //按指定的距离旋转指定列表中的元素。  
static <T> Set<T> singleton(T o) //返回只包含指定对象的不可改变的集合。  
static <T> List<T> singletonList(T o) //返回只包含指定对象的不可改变的列表。  
static <K,V> Map<K,V> singletonMap(K key, V value) //返回一个不可改变的Map,只将指定的指定的键映射到指定的值。  
static <T extends Comparable<? super T>> void sort(List<T> list) //指定列表为升序排序,根据其元素的 natural ordering。  
static <T> void sort(List<T> list, Comparator<? super T> c) //根据指定的比较器指定的顺序对指定的列表进行排序。  
static void swap(List<?> list, int i, int j) //在指定的列表中的指定位置上交换元素。  
static <T> Collection<T> synchronizedCollection(Collection<T> c) //返回由指定集合支持的同步(线程安全)集合。  
static <T> List<T> synchronizedList(List<T> list) //返回由指定列表支持的同步(线程安全)列表。  
static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) //返回由指定的Map支持的同步(线程安全)Map。  
static <K,V> NavigableMap<K,V> synchronizedNavigableMap(NavigableMap<K,V> m) //返回指定的导航Map支持的同步(线程安全)导航Map。  
static <T> NavigableSet<T> synchronizedNavigableSet(NavigableSet<T> s) //返回由指定的导航集支持的同步(线程安全)导航集。  
static <T> Set<T> synchronizedSet(Set<T> s) //返回一个由指定集合支持的同步(线程安全)集。  
static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m) //返回一个由指定的排序映射支持的同步(线程安全)排序的Map。  
static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s) //返回一个由指定的排序集支持的同步(线程安全)排序集。  

 

posted @ 2018-04-20 09:52  老王和小杨  阅读(...)  评论(...编辑  收藏