一、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 }