概述
Collections
是专用于集合操作的工具类,可对List
,Set
和Map
进行排序、线程安全化转换等操作。
Collections
中常用的方法
对集合元素的基本操作
/* 将指定的多个数据添加至指定集合。
如果集合因调用添加而改变,返回true. */
public static <T> boolean addAll(Collection<? super T> c,T... elements){}
例:
@Test
public void test(){
ArrayList<String> list = new ArrayList<>();
list.add("Tony");
list.add("Peter");
list.add("Jerry");
Collections.addAll(list,"Thor","John","Tom");
for(int index = 0;index < list.size();index++){
System.out.print(list.get(index)+" ");
}
}
/* 返回系统认为的自然排序最大值 */
public static <T extends Object&Comparable<? super 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>> min(Collection<? extends T> coll){}
/* 返回系统认为的定制排序最小值 */
public static <T> T min(Collection<? extends T> coll,Comparator<? super T> comp){}
/* 将List集合中所有与指定oldVal相等的元素的值替换为newVal.
如果List集合中包含至少1个元素与指定oldVal相等,返回true. */
public static <T> boolean replaceAll(List<T> list,T oldVal,T newVal){}
例:
@Test
public void test(){
ArrayList<String> list = new ArrayList<>();
list.add("Tony");
list.add("Peter");
list.add("Tony");
list.add("Jerry");
list.add("Tony");
Collections.replaceAll(list,"Tony","Tony Stark");
System.out.println(list);//[Tony Stark, Peter, Tony Stark, Jerry, Tony Stark]
}
/* 互换List集合中指定i和j索引位置的元素值 */
static void swap(List<?> list,int i,int j){}
例:
@Test
public void test(){
ArrayList<String> list = new ArrayList<>();
list.add("Tony");
list.add("Peter");
list.add("Jerry");
Collections.swap(list,1,2);
System.out.println(list);//[Tony, Jerry, Peter]
}
/* 返回List集合中最先出现的指定 子List 所在的索引。
如果List集合中不存在指定的 子List,返回-1.*/
public static indexOfSubList(List<?> source,List<?> target){}
/* 返回List集合中最后出现的指定 子List 所在的索引。
如果List集合中不存在指定的 子List,返回-1.*/
public static lastIndexOfSubList(List<?> source,List<?> target){}
例:
@Test
public void test(){
ArrayList<Integer> source = new ArrayList<>();
source.add(123);//<-
source.add(234);
source.add(345);//<-
source.add(456);
source.add(789);
source.add(234);
source.add(123);
source.add(567);
source.add(123);//<-
source.add(234);
source.add(345);//<-
source.add(234);
ArrayList<Integer> target_1 = new ArrayList<>();
target_1.add(123);
target_1.add(234);
target_1.add(345);
ArrayList<Integer> target_2 = new ArrayList<>();
target_2.add(123);
target_2.add(234);
target_2.add(345);
target_2.add(567);
System.out.println(Collections.indexOfSubList(source,target_1)); //0
System.out.println(Collections.lastIndexOfSubList(source,target_1)); //8
System.out.println(Collections.indexOfSubList(source,target_2)); //-1
System.out.println(Collections.lastIndexOfSubList(source,target_2)); //-1
}
/* 返回Collection集合中指定数据(Object o)出现的次数 */
public static frequency(Collection<?> c,Object o){}
例:
@Test
public void test(){
ArrayList<String> list = new ArrayList<>();
list.add("Tony");
list.add("Peter");
list.add("Tony");
list.add("Jerry");
list.add("Tony");
list.add("Tony");
System.out.println("Frequency of name Tony is "+Collections.frequency(list,"Tony")); //4
System.out.println("Frequency of name John is "+Collections.frequency(list,"John")); //0
}
/* 复制指定List集合src的所有元素至指定List集合dest.
必须保证dest.size() >= src.size(),否则将出现异常。 */
static <T> void copy(List<? super T> dest,List<? extends T> src){}
例:
@Test
public void test(){
List<String> src = new ArrayList<>();
src.add("Tony");
src.add("Peter");
src.add("Tony");
src.add("Jerry");
List<String> dest = Arrays.asList(new String[src.size()]);
Collections.copy(dest,src);
System.out.println(dest); //[Tony, Peter, Tony, Jerry]
}
对集合元素的排序操作
/* 反转指定List集合中的元素顺序。 */
static void reverse(List<?> list){}
例:
@Test
public void test(){
ArrayList<Integer> list = new ArrayList<>();
list.add(123);
list.add(234);
list.add(345);
list.add(456);
list.add(567);
System.out.println(list); //[123, 234, 345, 456, 567]
Collections.reverse(list);
System.out.println(list); //[567, 456, 345, 234, 123]
}
/* 对指定的List集合中的元素进行随机排序。
每调用一次shuffle()均会重新对元素进行随机排序。 */
public static void shuffle(List<?> list){}
@Test
public void test(){
ArrayList<Integer> list = new ArrayList<>();
list.add(123);
list.add(234);
list.add(345);
list.add(456);
list.add(567);
System.out.println(list); //[123, 234, 345, 456, 567]
Collections.shuffle(list);
System.out.println(list); //[234, 123, 567, 345, 456]
Collections.shuffle(list);
System.out.println(list); //[234, 567, 345, 456, 123]
Collections.shuffle(list);
System.out.println(list); //[234, 456, 567, 123, 345]
}
/* 对指定List集合的元素进行自然排序 */
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){}
对集合的线程安全转化
/* 返回指定Collection集合的线程安全版本。 */
static <T> Collection<T> synchronizedCollection(Collection<T> c){}
/* 返回指定List集合的线程安全版本。 */
static <T> List<T> synchronizedList(List<T> list){}
/* 返回指定Set集合的线程安全版本。 */
static <T> Set<T> synchronizedSet(Set<T> s){}
/* 返回指定Map集合的线程安全版本。 */
static <K,V> Map<K,V> synchronizedMap(Map<K,V> m){}