美文网首页
11,JAVA ArryList的三种排序方法

11,JAVA ArryList的三种排序方法

作者: 滔滔逐浪 | 来源:发表于2019-01-10 09:28 被阅读1次
  1. 使用Collections.sort()方法进行排序
    ArrayList 存储着以字符串形式存在的国名(country name),为了对这个 ArrayList 进行排序,你需要调用 Collections.sort()方法,传递由国名构成的 ArrayList 对象。这种方法将按照自然顺序(按字母升序)对元素(国名)进行排序。代码如下:
public class SortArrayListAscendingDescending {
    private ArrayList arrayList;
    public SortArrayListAscendingDescending(ArrayList arrayList) {
        this.arrayList = arrayList;
    }
    public ArrayList getArrayList() {
        return this.arrayList;
    }
    public ArrayList sortAscending() {
        Collections.sort(this.arrayList);
        return this.arrayList;
    }
    public ArrayList sortDescending() {
        Collections.sort(this.arrayList, Collections.reverseOrder());
        return this.arrayList;
    }
}
在SortArrayListAscendingDescending类中,我们在构造器中初始化了一个 ArrayList 对象。在 sortAscending()方法中,我们调用了 Collections.sort()方法,并传递这个初始化的 ArrayList对象为参数,返回排序后的 ArrayList。在 sortDescending()方法中,我们调用重载的 Collections.sort()方法让其按照降序对元素排序,这个版本的 Collections.sort()接收ArrayList对象作为第一个参数,一个由 Collections.reverseOrder()方法返回的 Comparator 对象作为第二个参数。

public class SortArrayListAscendingDescendingTest {
    public void testSortAscendingDescending() throws Exception {
        ArrayList countryList = new ArrayList();
        countryList.add("France");
        countryList.add("USA");
        countryList.add("India");
        countryList.add("Spain");
        countryList.add("England");

        SortArrayListAscendingDescending sortArrayList = new SortArrayListAscendingDescending(countryList);
        ArrayList unsortedArrayList = sortArrayList.getArrayList();
        System.out.println("Unsorted ArrayList: " + unsortedArrayList);

        ArrayList sortedArrayListAscending = sortArrayList.sortAscending();
        System.out.println("Sorted ArrayList in Ascending Order : " +
            sortedArrayListAscending);

        ArrayList sortedArrayListDescending = sortArrayList.sortDescending();
        System.out.println("Sorted ArrayList in Descending Order: " +
            sortedArrayListDescending);
    }
}

在SortArrayListAscendingDescendingTest测试代码中,我们创建一个 ArrayList 对象,并添加了 5 个字符串对象代表 5 个国家的名字。然后我们调用 getArrayList()、sortAscending()和 sortDescending()方法,并打印这些方法返回的 ArrayList 对象。

显示结果:


T E S T S

  1. 使用Comparable排序
    让我们来举一个例子,JobCandidate 类的对象保存在 ArrayList 中并准备对其进行排序。JobCandidate 类有三个成员变量:字符串类型的姓名和性别、整型的年龄。我们想要对保存在 ArrayList 中的 JobCandidate 对象按照年龄进行排序。因此我们要让 JobCandidate 类实现 Comparable 接口并重写 compareTo()方法。
public class JobCandidate implements Comparable {
    private String name;
    private String gender;
    private int age;

    public JobCandidate(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public String getGender() {
        return gender;
    }

    public int getAge() {
        return age;
    }

    @Override
    public int compareTo(JobCandidate candidate) {
        return ((this.getAge() < candidate.getAge()) ? (-1)
                                                     : ((this.getAge() == candidate.getAge())
        ? 0 : 1));
    }

    @Override
    public String toString() {
        return " Name: " + this.name + ", Gender: " + this.gender + ", age:" +
        this.age;
    }
}
JobCandidate 类被重写的 compareTo()方法中,我们实现了基于年龄的比较逻辑。

public class JobCandidateSorter {
 ArrayList jobCandidate = new ArrayList<>();
 public JobCandidateSorter(ArrayList jobCandidate) {
    this.jobCandidate = jobCandidate;
 }
 public ArrayList getSortedJobCandidateByAge() {
    Collections.sort(jobCandidate);
    return jobCandidate;
 }
}

在 JobCandidateSorter 类中,我们初始化了一个 ArrayList 对象,委托方将通过构造函数实例化 JobCandidateSorter 。然后我们编写了 getSortedJobCandidateByAge()方法,在这个方法中,我们调用 Collections.sort()并传递已经初始化了的 ArrayList 为参数,最后返回排序后的 ArrayList。

public class JobCandidateSorterTest {
public void testGetSortedJobCandidateByAge() throws Exception {
JobCandidate jobCandidate1 = new JobCandidate("Mark Smith", "Male", 26);
JobCandidate jobCandidate2 = new JobCandidate("Sandy Hunt", "Female", 23);
JobCandidate jobCandidate3 = new JobCandidate("Betty Clark", "Female",
20);
JobCandidate jobCandidate4 = new JobCandidate("Andrew Styne", "Male", 24);
ArrayList jobCandidateList = new ArrayList();
jobCandidateList.add(jobCandidate1);
jobCandidateList.add(jobCandidate2);
jobCandidateList.add(jobCandidate3);
jobCandidateList.add(jobCandidate4);

    JobCandidateSorter jobCandidateSorter = new JobCandidateSorter(jobCandidateList);
    ArrayList sortedJobCandidate = jobCandidateSorter.getSortedJobCandidateByAge();
    System.out.println("-----Sorted JobCandidate by age: Ascending-----");

    for (JobCandidate jobCandidate : sortedJobCandidate) {
        System.out.println(jobCandidate);
    }
}

}
JobCandidateSorterTest类中,我们创建了四个 JobCandidate 对象并把它们添加到 ArrayList,然后传递这个 ArrayList 到构造函数来实例化 JobCandidateSorter 类。最后,我们调用 JobCandidateSorter 类的 getSortedJobCandidateByAge()方法,并打印这个方法返回的排序后的 ArrayList。测试的输出结果如下:


T E S T S

Running guru.springframework.blog.sortarraylist.comparable.JobCandidateSorterTest
-----Sorted JobCandidate by age: Ascending-----
Name: Betty Clark, Gender: Female, age:20
Name: Sandy Hunt, Gender: Female, age:23
Name: Andrew Styne, Gender: Male, age:24
Name: Mark Smith, Gender: Male, age:26
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec

  • in guru.springframework.blog.sortarraylist.comparable.JobCandidateSorterTest
  1. 使用 Comparator 排序
    比如我有一个Person类,它的实例对象存储在ArrayList数组中,现在要把ArrayList数组中的Person对象按照年龄排序.代码如下:

Person类

public class Person {
String name;
int age;

public Person(String name, int age) {
    this.name = name;
    this.age = age;

}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}
Mycomparator类

public class Mycomparator implements Comparator {

public int compare(Object o1, Object o2) {
    Person p1 = (Person) o1;
    Person p2 = (Person) o2;
    if (p1.age < p2.age) return 1;
    else return 0;
}

}
ListSort类

public class ListSort {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Person("lcl", 28));
list.add(new Person("fx", 23));
list.add(new Person("wqx", 29));
Comparator comp = new Mycomparator();
Collections.sort(list, comp);
for (int i = 0; i < list.size(); i) {
Person p = (Person) list.get(i);
System.out.println(p.getName());
}
}
}
当然,如果你的List包装的是基本类型或者String,则只要 Collections.sort(list);即可

相关文章

网友评论

      本文标题:11,JAVA ArryList的三种排序方法

      本文链接:https://www.haomeiwen.com/subject/zxxnrqtx.html