------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
Java为操作Set、List和Map提供了一系列工具类,主要有Collections和Arrays。这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可。Collections:是集合对象的工具类,提供了操作集合的工具方法;Arrays:是数组的工具类,提供了对数组的工具方法。
当把数组转换成集合后,可以用集合的方法来操作集合,但是某些改变集合长度发方法不可以用,因为数组是固定长度的。
当数组中的元素是引用数据类型时,变成集合后,就将数组中的元素作为集合中的元素存在。
当数组中的元素是基本数据类型时,变成集合后,会将这个数组变成集合中的元素。
1、Collections工具类
在Collections工具类中很多方法是用于对List集合进行操作的,如比较,查找,随机排序等,下面是常用的方法:
1.查找: T max(Collection<? extends T> coll) 根据集合的自然顺序,获取coll集合中的最大元素 T max(Collection<? extends T> coll,Comparator<? super T> comp) 根据指定比较器comp的顺序,获取coll集合中的最大元素 Int binarySearch(Lsit<? extends Comparable<? super T>> list,Tkey) 二分法搜索list集合中的指定对象 2.替换: void fill(List<? super T> list, T obj) 将list集合中的全部元素替换成指定对象obj boolean replaceAll(List<T> lsit,T oldVal,T newVal) 使用newVal替换list集合中的oldVal值 3.反转 reverse(List<?> list) 反转list集合中元素的顺序 Comparator reverseOrder() 返回一个比较器,强行逆转了实现Comparable接口的对象的自然顺序 Comparator reverseOrder(Comparator<T> cmp) 返回一个比较器,强行逆转了指定比较器的顺序 4.排序: void shuffle(List<?> list) 使用默认随机源对list集合中的元素进行随机排序 void sort(Lsit<T> list) 根据自然顺序对list集合中的元素进行排序 void sort(List<T> lsit,Comparator<? super T> c) 根据指定比较器c的排序方式对list集合进行排序
下面是一段练习代码:
public class User { //此处无需实现Comparable接口 private String name; private Integer order; public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getOrder() { return order; }
public void setOrder(Integer order) { this.order = order; } } 主类中这样写即可: public class Test{ public static void main(String[] args) { User user1 = new User(); user1.setName("a"); user1.setOrder(1); User user2 = new User(); user2.setName("b"); user2.setOrder(2); List<User> list = new ArrayList<User>(); list.add(user2); list.add(user1);
Collections.sort(list,new Comparator<User>(){ public int compare(User arg0, User arg1) { return arg0.getOrder().compareTo(arg1.getOrder()); } }); for(User u : list){ System.out.println(u.getName()); } } }
上面程序演示了如何用Collections的Sort对List的排序方法。
2、Arrays工具类
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
1.给数组赋值:通过fill方法。
2.对数组排序:通过sort方法,按升序。
3.比较数组:通过equals方法比较数组中元素值是否相等。
4.查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
下面是常用方法的具体应用代码:
public class TestArrays {
public static void output(int[] array) {
if (array!=null) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
System.out.println();
}
public static void main(String[] args) {
int[] array = new int[5];
//填充数组
Arrays.fill(array, 5);
System.out.println("填充数组:Arrays.fill(array, 5):");
TestArrays.output(array);
//将数组的第2和第3个元素赋值为8
Arrays.fill(array, 2, 4, 8);
System.out.println("将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):");
TestArrays.output(array);
int[] array1 = {7,8,3,2,12,6,3,5,4};
//对数组的第2个到第6个进行排序进行排序
Arrays.sort(array1,2,7);
System.out.println("对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):");
TestArrays.output(array1);
//对整个数组进行排序
Arrays.sort(array1);
System.out.println("对整个数组进行排序:Arrays.sort(array1):");
TestArrays.output(array1);
//比较数组元素是否相等
System.out.println("比较数组元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1));
int[] array2 = array1.clone();
System.out.println("克隆后数组元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2));
//使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确)
Arrays.sort(array1);
System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3));
//如果不存在就返回负数
System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9));
}
}
注意:将数组转换成集合,不可使用集合的增删方法,因为数组的长度是固定的,如果进行增删操作,则会产生UnsupportedOperationException的编译异常。
3、jdk1.5新特性
Collection有一个父接口Iterable,该接口封装了iterator方法,并提供了一个增强型的for循环,具体格式如下:
for(元素类型 变量 :数组或者Collection集合) { }
增强for循环和传统for循环区别:增强for循环,使用时,必须要有被遍历的目标,而且只能遍历数组和Collection集合,简化了迭代;传统for循环,使用更加普遍。
注意:遍历数组还是使用传统for循环,这样可以通过指针对数组中的元素进行操作
可变参数是指定数据类型的后面加上三个点,其实就是一个数组类型的参数,以前定义一个int[]类型 参数,调用必须要定义好一个数组,再往里传递。而现在定义一个int…类型的参数,调用者,直接往该函数里传递元素即可,在运行时,自动会将这些实际参数封装到一个该类型的数组中。
注意:如果函数上有多个参数,可变参数一定要定义在参数列表最后边,否则编译失败
本文介绍了集合框架的两个工具类,以及jdk1.5的两个新特性。简单的讲述了Collections和Arrays基本的使用方法,其中Collections写了一个简单的用sort排序的实例。