我没有得到compareTo的概念。从我读到的,因为它是一个接口,我们决定如何将一个对象与另一个对象进行比较(我们定义一个对象大于,等于和小于另一个对象的含义)。但是当你使用compareTo方法时,它会返回一个整数。这怎么连接?我们怎么处理这个整数?这如何连接到排序方法? 示例方案:您正在比较两个字符串。你想对它们进行排序,以便首先使用字母最多的字符串。 问题:你如何设置?
答案 0 :(得分:2)
让我们了解问题的核心。想象一下,我们有一个我们已经定义为实现K
的课程Comparable<K>
,以及两个课程a
和b
的课程K
。
要知道a
是否&#34;小于 b`,我们会写
if (a.compareTo(b) < 0) {
// compareTo returned a negative number
,,,
}
要知道a
是否等于&#34;等于&#34; b
,我们写
if (a.compareTo(b) == 0) {
// compareTo returned zero
...
}
要知道a
是否&#34;大于&#34; b
,我们写
if (a.compareTo(b) > 0) {
// compareTo returned a positive integer
...
}
这有点清楚吗?
答案 1 :(得分:1)
按升序和降序排序自定义对象列表
Java提供了两个接口,用于使用类的数据成员对对象进行排序:
可比较和 比较器接口
Java Comparable接口
Java Comparable接口用于对用户定义的类的对象进行排序。 此接口位于java.lang包中,并且只包含一个名为compareTo(Object)的方法。 它仅提供单个排序顺序,即您可以仅基于单个数据成员对元素进行排序。 public int compareTo(Object obj):用于将当前对象与指定对象进行比较。 我们可以对以下元素进行排序: 字符串对象 包装类对象 用户定义的类对象
Java Comparator界面
Java Comparator接口用于对用户定义的类的对象进行排序。 Collections类提供了用于对集合元素进行排序的静态方法。 用于排序List元素的Collections类的方法 public void sort(List list,Comparator c):用于按给定的Comparator对List的元素进行排序。
参考文献:http://corejavapractical.blogspot.in/2017/08/algorithms-in-java.html
package com.mycompany.projectname.corejava;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.CopyOnWriteArrayList;
public class AlgorithmsDemo {
public static void main(String[] args) {
//sortingCustomObjectsByComparable();
sortingCustomObjectsByComparator();
}
private static void sortingCustomObjectsByComparable(){
// Sort Projects by project id in ascending order.
List projects = new ArrayList<>();
Project project = new Project();
project.setProjectId(100);
project.setProjectName("project 100");
projects.add(project);
Project project2 = new Project();
project2.setProjectId(200);
project2.setProjectName("project 200");
projects.add(project2);
Project project3 = new Project();
project3.setProjectId(50);
project3.setProjectName("project 50");
projects.add(project3);
Collections.sort(projects);
printList(projects);
}
private static void sortingCustomObjectsByComparator(){
// Sort Projects by project id in ascending order.
List projects = new ArrayList<>();
Project project = new Project();
project.setProjectId(100);
project.setProjectName("project 100");
projects.add(project);
Project project2 = new Project();
project2.setProjectId(200);
project2.setProjectName("project 200");
projects.add(project2);
Project project3 = new Project();
project3.setProjectId(50);
project3.setProjectName("project 50");
projects.add(project3);
// Sorting project by project id in ascending order in Java
Collections.sort(projects);
printList(projects);
// Sorting project by project id in descending order in Java
Collections.sort(projects, Collections.reverseOrder());
printList(projects);
// Sorting project by project name in ascending order in Java
Comparator comparator = new Comparator() {
@Override
public int compare(Project o1, Project o2) {
// TODO Auto-generated method stub
return o1.getProjectName().compareTo(o2.getProjectName());
}
};
Collections.sort(projects, comparator);
printList(projects);
}
private static void printList(List projects){
for(Project project : projects){
System.out.println(project.getProjectId());
System.out.println(project.getProjectName());
}
}
}
class Project implements Comparable{
private int projectId;
private String projectName;
public int getProjectId() {
return projectId;
}
public void setProjectId(int projectId) {
this.projectId = projectId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
@Override
public int compareTo(Project o) {
// TODO Auto-generated method stub
return this.projectId - o.getProjectId();
}
}
答案 2 :(得分:0)
http://www.javapractices.com/topic/TopicAction.do?Id=10 此链接提供了有关实施compareTo的良好指导。
当你有一个需要订购实例的类时,compareTo会派上用场。当您实现compareTo时,您基本上是在告诉sortmethod您的类的不同实例如何与相互比较。
假设您有一个拥有整数Age,一个双GPA和一个字符串Name的类Student,您可以通过其中任何一个字段对Student的实例进行排序。但是,您决定要根据年龄进行排序。然后,您将实现compareTo函数以基于Age而不是其他两个字段返回反馈。