“尽管有种种相似之处,生活的每时每刻就像一个刚出生的婴儿,一张新的面孔,我们从未见过,也不可能再次见到。我们无法停留在过去,也无法预见我们的反应。我们需要不带成见的感受变化。我们需要用全身心去倾听。”

面向对象入门对象关系、Java集合 - 图1

static List asList(T… a)

将任意类型的对象数组转化为List,这里T是泛型,在使用时需要声明具体类型。 ... 是可变参数的一种声明,当不确定有方法参数的长度时,可以使用。 需要注意的是,Arrays.asList()的参数值必须是对象数组,才支持泛型 。也就是基本类型的数组(byte,short,int,long,float,double,boolean)都不支持。

  1. import java.util.Arrays;
  2. import java.util.List;
  3. public class ArraysMain {
  4. public static void main(String[] args) {
  5. // 数字数组
  6. Integer[] intArr = { 10, 20, 15, 22, 35 };
  7. // 转化数组为 list
  8. List<Integer> lists = Arrays.asList(intArr);
  9. System.out.println("集合的长度是: " + lists.size());
  10. }
  11. }

如下为... 的使用,在不确定参数个数的时候。

  1. import java.util.Arrays;
  2. import java.util.List;
  3. public class ArraysMain {
  4. public static void main(String[] args) {
  5. // 转化数组为 list
  6. List<String> lists = Arrays.asList("小王","小明");
  7. System.out.println("集合的长度是: " + lists.size());
  8. // 转化数组为 list2
  9. List<String> lists2 = Arrays.asList("小王","小明","小李");
  10. System.out.println("集合2的长度是: " + lists2.size());
  11. }
  12. }

排序

Arrays.sort()的使用,也注意一下Arrays.toString(),这个方法其实是Java执行的时候遍历每一个数据调用其toString()方法,然后再组合成一个字符串。

  1. import java.util.Arrays;
  2. public class ArraysSortTest {
  3. public static void main(String[] args) {
  4. // Get the Array
  5. Integer[] intArr = { 10, 20, 15, 22, 35 };
  6. // To sort the array using normal sort-
  7. Arrays.sort(intArr);
  8. System.out.println("Integer Array: "
  9. + Arrays.toString(intArr));//Arrays.toString()方法任何类型数组都可以转化为字符串
  10. }
  11. }

自定义排序

若想要降序排序,就需要用到 java.util.Comparator ,这是一个接口,用来声明比较规则,接口方法如下:

  1. public interface Comparator<T> {
  2. //返回值是 int,我们根据返回值 >0、=0、<0 进行重新排序,返回值>0,交换位置;返回值<0,不交换位置
  3. int compare(T o1, T o2);
  4. }

如果o1>o2,则升序;o1<o2,则降序。 关于这个方法的理解我不是很透彻,有一个我认为较为简单的记法:当想升序时,就 return o1-o2; ;想降序时,就 return o2-o1 。如果说理解的话,那么,需要根据返回值来进行排序。o1和o2表示需要排序的数据的顺序,o1是在o2的前面。返回 o2-o1时 ,如果 o2>o1 ,那么返回值就大于零,就交换o1和o2的位置,实现降序;如果 o2<o1 ,那么返回值小于零,就不交换o1和o2 的位置,依然是降序。升序同理。例子(此例子是数组的排序)如下:

  1. import java.util.*;
  2. public class ArraysSortTest2 {
  3. public static void main(String[] args) {
  4. Integer[] intArr = { 10, 20, 15, 22, 35 };
  5. // 自定义排序
  6. Arrays.sort(intArr, new Comparator<Integer>(){
  7. public int compare(Integer o1, Integer o2){
  8. // 判断 o2>o1,执行降序排序
  9. return o2-o1;
  10. }
  11. });
  12. System.out.println("Integer Array: "
  13. + Arrays.toString(intArr));
  14. }
  15. }

集合排序 (可以看到数组排序使用Arrays.sort(),集合排序使用Collections.sort())

需要注意的是,如果执行了 `Collections.sort() 方法。list的顺序会直接被修改为排序后。

  1. import java.util.*;
  2. public class ListSortTest {
  3. public static void main (String[] args) {
  4. //有一个Student类的学生记录
  5. List<Student> ar = new ArrayList<Student>();
  6. ar.add(new Student(111, "bbbb", "london"));
  7. ar.add(new Student(131, "aaaa", "nyc"));
  8. ar.add(new Student(121, "cccc", "jaipur"));
  9. System.out.println("原始集合");
  10. for (int i=0; i<ar.size(); i++) {
  11. System.out.println(ar.get(i));
  12. }
  13. // 实现升序排序
  14. Collections.sort(ar, new Comparator<Student>(){
  15. public int compare(Student a, Student b) {
  16. // 第一个参数的学号 > 第二个参数的学号
  17. return a.getRollNo() - b.getRollNo();//降序返回b.getRollNo()-a.getRollNo();
  18. }
  19. });
  20. System.out.println("\n排序后的集合");
  21. for (int i=0; i<ar.size(); i++) {
  22. System.out.println(ar.get(i));
  23. }
  24. }
  25. }