zoukankan      html  css  js  c++  java
  • Java 集合:(三十一)Collections 工具类

    一、Collections 工具类

      1、Collections 是一个操作 Set、List 和 Map 等集合的工具类。

      2、Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法

      3、

      4、

      5、

    二、Collections 方法列表

      

    三、常用方法说明

      1、排序操作

    public static void reverse(List<?> list) {}  反转 List 中元素的顺序
    
    public static void shuffle(List<?> list) {}  对 List 集合元素进行随机排序
    
    public static void shuffle(List<?> list, Random rnd) {} 对 List 集合元素进行随机排序
    
    public static void swap(List<?> list, int i, int j) {}  将指定 list 集合中的 i 处元素和 j 处元素进行交换
    
    public static <T extends Comparable<? super T>> void sort(List<T> list) {}  对List集合元素按照默认规则进行排序(默认升序)
    
    public static <T> void sort(List<T> list, Comparator<? super T> c) {}  根据指定的 Comparator 产生的顺序对 List 集合元素进行排序

    public static void rotate(List<?> list, int distance)//旋转。当distance为正数时,将list后distance个元素整体移到前。当distance为负数时,将 list的前distance个元素整体移到后

        注意:被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则。

      2、查找、替换

    public static <T> void fill(List<? super T> list, T obj) {}  将List集合中填充为 obj
    
    public static <T> void copy(List<? super T> dest, List<? extends T> src) {} 复制 src 到 dest
    
    public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) {}  根据元素的自然顺序,返回给定集合中的最小元素
    public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp) {}             根据指定的比较器,返回给定集合中的最大元素
     
    public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {}  根据元素的自然顺序,返回给定集合中的最大元素
    public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) {}  			 根据指定的比较器,返回给定集合中的最大元素
    
    
    public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) {}  使用新值替换List 对象的所有旧值
    
    public static int frequency(Collection<?> c, Object o) {}  返回指定集合中指定元素的出现次数

    int binarySearch(List list, Object key)//对List进行二分查找,返回索引,注意List必须是有序的
    int indexOfSubList(List list, List target)//统计target在list中第一次出现的索引,找不到则返回-1,类比 int lastIndexOfSubList(List source, list target).

      

        copy方法测试:

     1     @Test
     2     public void test2(){
     3         List list = new ArrayList();
     4         list.add(123);
     5         list.add(43);
     6         list.add(765);
     7         list.add(-97);
     8         list.add(0);
     9 
    10         //报异常:IndexOutOfBoundsException("Source does not fit in dest")
    11         //List dest = new ArrayList();
    12         //Collections.copy(dest,list);
    13         //正确的:
    14         List dest = Arrays.asList(new Object[list.size()]);
    15         System.out.println(dest.size());//list.size();
    16         Collections.copy(dest,list);
    17 
    18         System.out.println(dest);    
    19     }

      3、空集合

        当操作一个方法时,如果返回的集合是一个空对象,并不应该返回 null,而是应该返回一个空集合。

        Collections 给我们提供了几种返回空集合的方法:

    public static final <T> Set<T> emptySet() {}
    public static <E> SortedSet<E> emptySortedSet() {}
    public static final <T> List<T> emptyList() {}
    public static final <K,V> Map<K,V> emptyMap() {}
    public static final <K,V> SortedMap<K,V> emptySortedMap() {}
    

      

      4、同步控制

    Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。
     
     
    public static <T> Collection<T> synchronizedCollection(Collection<T> c) {]
    static <T> Collection<T> synchronizedCollection(Collection<T> c, Object mutex) {}
    public static <T> Set<T> synchronizedSet(Set<T> s) {}
    static <T> Set<T> synchronizedSet(Set<T> s, Object mutex) {}
    public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s) {}
    public static <T> NavigableSet<T> synchronizedNavigableSet(NavigableSet<T> s) {}
    public static <T> List<T> synchronizedList(List<T> list) {}
    static <T> List<T> synchronizedList(List<T> list, Object mutex) {}
    public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {}
    public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m) {}
    public static <K,V> NavigableMap<K,V> synchronizedNavigableMap(NavigableMap<K,V> m) {}
    

        我们知道 HashSet , TreeSet , ArrayList , LinkedList , HashMap , TreeMap 都是线程不安全的。
        Collections 提供了多个静态⽅法可以把他们包装成线程同步的集合。
        最好不要⽤下⾯这些⽅法,效率⾮常低,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合。

      5、补充:Enumeration

        Enumeration 接口是 Iterator 迭代器的 “古老版本”

        案例:

    1 Enumeration stringEnum = new StringTokenizer("a-b*c-d-e-g", "-");
    2 while(stringEnum.hasMoreElements()){
    3     Object obj = stringEnum.nextElement();
    4     System.out.println(obj); 
    5 }

    四、

    五、

    六、

  • 相关阅读:
    BZOJ4675: 点对游戏
    Codeforces 1097 Alex and a TV Show
    UOJ#349. 【WC2018】即时战略
    DNS解析过程详解
    js中bind、call、apply函数的用法
    jQuery.extend 函数详解
    JQuery Mobile
    JQuery Mobile 页面参数传递
    HTML div 滚动条样式设计
    JavaScript 加载动画Canvas 设计
  • 原文地址:https://www.cnblogs.com/niujifei/p/14798903.html
Copyright © 2011-2022 走看看