我想按照他们拥有的字符串对对象进行排序。只是想知道这有意义吗?
在此之前我只使用过Arrays.sort(BlahList);
但是现在我可以拥有许多对象而不仅仅是字符串的arraylist。
public class Contact implements Comparable
{
private string name;
public compareTo (Contact Contact1)
{
return this.name.compareTo(Contact1.name);
}
}
在主要方法中我有:
Collections.sort(ContactList);
如果名字是年龄,我还想知道这是否适用于整数?
答案 0 :(得分:2)
首先,您应该键入 Comparable
界面:
public class Contact implements Comparable<Contact>
其次,您应该为参数/变量使用前导小写:
public compareTo (Contact contact)
第三,除非必要,否则不要使用this.
- 这只是代码混乱:
return name.compareTo(contact.name);
最后,是的,你可以比较这样的年龄:
return age - contact.age; // order youngest to oldest
或更清洁的方式(感谢指出JB):
return Integer.compareTo(age, contact.age);
整个课程应如下所示:
public class Contact implements Comparable<Contact> {
private string name;
public int compareTo(Contact contact) {
return name.compareTo(contact.name);
}
}
注意:您错过了int
方法代码中的返回类型compareTo()
。
要比较年龄,请将compareTo()
方法替换为:
public int compareTo(Contact contact) {
return Integer.compareTo(age, contact.age);
}
答案 1 :(得分:0)
它适用于所有人。如果是int,你需要在compareTo方法中编写以下代码
return this.age-contact1.age// for ascending order
contact1.age-this.age // for descending order
答案 2 :(得分:0)
如果您需要多个比较器,我建议您使用Comparator
接口:
对于名称比较:
public class NameCompare implements Comparator<Contact> {
@Override
public int compare(Contact a, Contact b) {
if (a.getName().compareToIgnoreCase(b.getName())>0)
return 1;
else if (a.getName().compareToIgnoreCase(b.getName())<0)
return -1;
return 0;
}
}
年龄比较:
public class AgeCompare implements Comparator<Contact> {
@Override
public int compare(Contact a, Contact b) {
if (a.getAge() > b.getAge())
return 1;
else if (a.getAge() < b.getAge())
return -1;
return 0;
}
}
在主要内容中,您只需传递所需的Comparator
:
ArrayList al = new ArrayList<Contact>
Collections.sort(al, new NameCompare())
Collections.sort(al, new AgeCompare())
答案 3 :(得分:0)
在java 7中,您可以使用Integer.compare(age,contact.age)。
它(几乎)与(x 顺便说一句。不要使用age-contact.age,因为Integer.MIN_VALUE-Integer.MAX_VALUE = 1 对于复杂的比较器(例如,首先按名称,然后按年龄,如果名称相同)我建议使用像谷歌番石榴这样的库。