Java中的集合工具类Collections


  

引言:

Collections工具类可以用来操作Collection,还能用来操作Map。

  Collections 中提供了一系列静态的方法对集合元素进行排序、查询、修改、复制等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制、返回空集合、检测集合元素类型等方法。功能还是比较强大。

1. 添加元素

  • public static <T> boolean addAll(Collection<? super T> c, T… elements)

2. 排序

  • public static <T extends Comparable<? super T>> void sort(List<T> list):自然排序
  • public static <T> void sort(List<T> list, Comparator<? super T> c):定制排序
  • public static void reverse(List<?> list):逆序
  • public static <T> Comparator<T> reverseOrder():返回一个与自然排序逆序的比较器,要求泛型T需实现Comparabale接口。
  • public static <T> Comparator<T> reverseOrder(Comparator<T> cmp):返回一个与指定比较器逆序的比较器。
  • public static void shuffle(List<?> list):每次打乱的顺序都不一样
  • public static void shuffle(List<?> list, Random rnd):每次打乱的顺序一样
  • public static void swap(List<?> int i, int j):交换对应位置的元素
  • public static void rotate(List<?> list, int distance):旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面

3. 查找,统计

  • public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
  • public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
  • public static int indexOfSubList(List source, List target)
  • public static int lastIndexOfSubList(List source, List target)
  • public static int frequency(Collection<?> c, Object o)
  • 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 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 disjoint(Collection c1, Collection c2):如果两个集合没有相同的集合,则返回 true

4. 替换

  • public static <T> void fill(List<? super T> list, T obj)
  • public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)

5. 复制

  • public static <T> void copy(List<? super T> dest, List<? extends T> src)
  • public static <T> List<T> nCopies(int n, T o):将 o 复制 n 份,形成不可变 list 并返回

6. 同步控制(返回线程安全的集合)。Collections工具类提供了多个 synchronizedXxx() 方法,这些方法可以将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。我们知道Vector是线程安全的,ArrayList是线程不安全的,但是往往ArrayList的执行效率比Vector高,所以可以使用以下方法将ArrayList包装成线程安全的List。

  • public static <T> Collection<T> synchronizedCollection(Collection<T> c)
  • public static <T> List<T> synchronizedList(List<T> list)
  • public static <T> Set<T> synchronizedSet(Set<T> s)
  • public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
  • public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
  • public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
  • public static <T> NavigableSet<T> synchronizedNavigableSet(NavigableSet<T> s)
  • public static <K,V> NavigableMap<K,V> synchronizedNavigableMap(NavigableMap<K,V> m)

7. 返回一个空集合

  • public static <T> List<T> emptyList()
  • public static <T> Set<T> emptySet()
  • public static <K,V> Map<K,V> emptyMap()
  • public static <E> SortedSet<E> emptySortedSet()
  • public static <K,V> SortedMap<K,V> emptySortedMap()
  • public static <T> Enumeration<T> emptyEnumeration()
  • public static <T> Iterator<T> emptyIterator()
  • public static <T> ListIterator<T> emptyListIterator()
  • public static <E> NavigableSet<E> emptyNavigableSet()
  • public static <K,V> NavigableMap<K,V> emptyNavigableMap()

8. 返回一个可进行元素类型检查(添加元素时)的集合,相当于将现有的集合封装成在添加元素时可以进行元素类型检查的集合。

  • public static <E> Collection<E> checkedCollection(Collection<E> c, Class<E> type)
  • public static <E> List<E> checkedList(List<E> list, Class<E> type)
  • public static <E> Set<E> checkedSet(Set<E> s, Class<E> type)
  • public static <K,V> Map<K,V> checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType)
  • public static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s, Class<E> type)
  • public static <K,V> SortedMap<K,V> checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType)
  • public static <E> Queue<E> checkedQueue(Queue<E> queue, Class<E> type)
  • public static <E> NavigableSet<E> checkedNavigableSet(NavigableSet<E> s, Class<E> type)
  • public static <K,V> NavigableMap<K,V> checkedNavigableMap(NavigableMap<K,V> m, Class<K> keyType, Class<V> valueType)

9. 创建只读,不可改变的集合

  • public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c)
  • public static <T> List<T> unmodifiableList(List<? extends T> list)
  • public static <T> Set<T> unmodifiableSet(Set<? extends T> s)
  • public static <K, V> Map<K, V> unmodifiableMap(Map<? extends K, ? extends V> m)
  • public static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s)
  • public static <K, V> SortedMap<K, V> unmodifiableSortedMap(SortedMap<K, ? extends V> m)
  • public static <T> NavigableSet<T> unmodifiableNavigableSet(NavigableSet<T> s)
  • public static <K, V> NavigableMap<K, V> unmodifiableNavigableMap(NavigableMap<K, ? extends V> m)

10. 其他

  • public static <T> Enumeration<T> enumeration(Collection<T> c)
  • public static <E> Set<E> newSetFromMap(Map<E,Boolean> map):提供一个和 Map 实现相对应的Set实现

举例

public class CollectionsTest {

    @Test
    public void test2() {
        List list = new ArrayList();
        list.add(123);
        list.add(43);
        list.add(765);
        list.add(-97);
        list.add(0);

        /*
        报异常:IndexOutOfBoundsException("Source does not fit in dest")
        List dest = new ArrayList();
        Collections.copy(dest, list);
        */

        //正确的:
        List dest = Arrays.asList(new Object[list.size()]);
        System.out.println(dest.size());//list.size();
        Collections.copy(dest,list);
        System.out.println(dest);

        /*
        Collections 类中提供了多个 synchronizedXxx() 方法,
        该方法可使将指定集合包装成线程同步的集合,从而可以解决
        多线程并发访问集合时的线程安全问题
        */
        //返回的list1即为线程安全的List
        List list1 = Collections.synchronizedList(list);
    }

    @Test
    public void test1() {
        List list = new ArrayList();
        list.add(123);
        list.add(43);
        list.add(765);
        list.add(765);
        list.add(765);
        list.add(-97);
        list.add(0);

        Collections.reverse(list);
        Collections.shuffle(list);
        Collections.sort(list);
        Collections.swap(list,1,2);
        int frequency = Collections.frequency(list, 123);
    }
}

文章作者: YangChongZhi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 YangChongZhi !
评论
 上一篇
Java中的常用类常用方法 Java中的常用类常用方法
   引言: Java中常用类中的常用方法,如果能够记住些,对刷题还是有一定的帮助的。 一、Object类 public final native Class<?> getClass(); native方法,用于返回当前运行
2021-01-13
下一篇 
Java中的集合Collection和Map Java中的集合Collection和Map
   引言: Java中的集合可分为 Collection 和 Map 两种体系。Collection接口:单列数据,定义了存取一组对象的方法的集合。Map接口:双列数据,保存具有映射关系“key-value对”的集合。Java 集合类可以
2021-01-09
  目录