zoukankan      html  css  js  c++  java
  • 集合框架

    一、集合框架的分类:

      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) //返回一个由指定的排序集支持的同步(线程安全)排序集。  
  • 相关阅读:
    MySQL字符集 utf8 和 utf8mb4 区别及排序规则 general_ci 和 unicode_ci 和 bin 的区别
    tp5定时任务
    PHP7.X连接SQLSERVER数据库(CENTOS7)
    php 连接sqlserver
    接口踩坑:Status (blocked:other)
    php 一些常用函数
    tp5支付宝和微信支付
    php 数组相关方法的一些实际妙用
    MySQL如何利用索引优化ORDER BY排序语
    composer命令介绍之install和update及其区别
  • 原文地址:https://www.cnblogs.com/laowangc/p/8888471.html
Copyright © 2011-2022 走看看