Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了将集合对象设置为不可变、对集合对象实现同步控制等方法。
- Collections提供了如下几个方法同于对List集合元素进行排序。
static void reverse(List list) //反转指定List集合中元素的顺序
static void shuffle(List list) //对List集合元素进行随机排序(shuffle方法模拟了“洗牌”动作)
static void sort(List list) //根据元素的自然顺序对指定List集合的元素按照升序排序
static void swap(List list, int i, int j) //将List集合中的第i个元素和第j个元素进行交换
static void rotate(List list, int distance) //当distance为正数时,将list集合的后distance个元素“整体”移动到前面;当distance为负数时,将list集合的前distance个元素整体移动到后面。该方法不会改变集合的长度。
下面程序简单示范了利用Collections工具类来操作List集合。
import java.util.Collections;
public class SortTest {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
nums.add(2);
nums.add(-5);
nums.add(3);
nums.add(0);
System.out.println(nums);//[2, -5, 3, 0]
//从输出结果可以看出,ArrayList是按照加入的顺序输出的
//将nums中的元素反转
Collections.reverse(nums);
System.out.println(nums); //[0, 3, -5, 2]
//将nums中的元素按照自然顺序排序
Collections.sort(nums);
System.out.println(nums); //[-5, 0, 2, 3]
//将nums中的元素混洗
Collections.shuffle(nums);
System.out.println(nums);//[-5, 2, 3, 0]
//将nums中的后两个元素整体移动到前面
Collections.rotate(nums, 2);
System.out.println(nums);//[3, 0, -5, 2]
}
}
- 查找、替换操作
Collections还提供了用于查找、替换集合元素的常用方法。
下面列出几个常见的:
static int binarySearch(List list, Object key) 使用二分搜索法搜索指定的List集合,
以获得指定对象在List集合中的索引。如果要使该方法可以正常工作,则必须保证List集合中的元素已经有序状态。因为二分查找必须保障带查找序列有序。
static Object max(Collection coll) //根据元素的自然顺序,返回给定集合中的最大元素。
static Object min(Collection coll) //根据元素的自然顺序,返回指定集合中的最小元素。
static void fill(List list, Object obj) //使用指定元素obj替换指定list集合中的所有元素
static int frequency(Collection c, Object o) //返回指定集合中指定元素出现的次数
下面程序简单示范了Collections工具类的用法:
package JavaLearing;
import java.util.ArrayList;
import java.util.Collections;
public class SearchTest {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
nums.add(2);
nums.add(-5);
nums.add(3);
nums.add(0);
System.out.println(nums); //[2, -5, 3, 0]
//输出最大元素
System.out.println(Collections.max(nums));//3
//输出最小元素
System.out.println(Collections.min(nums));//-5
//将集合中的-5用100来代替
Collections.replaceAll(nums, -5, 100);
System.out.println(nums);//[2, 100, 3, 0]
//判断集合中的元素0出现的次数
System.out.println(Collections.frequency(nums, 0));
//二分法查找集合中的元素3
Collections.sort(nums);
System.out.println(Collections.binarySearch(nums, 3)); //输出查找到的位置2
}
}
下节介绍同步控制和不可变集合。