gpt4 book ai didi

java - 使用compareTo 方法按字母顺序对ArrayList 中的新条目进行排序

转载 作者:行者123 更新时间:2023-12-01 19:41:42 25 4
gpt4 key购买 nike

我想按字母顺序将条目放入名为entrys 的ArrayList 目录中。我希望将新条目添加到目录中以放置到 ArrayList 中的适当位置。

例如,如果目录中已有两个姓氏为“Beta”和“Cee”的条目,并且我们想要添加一个姓氏为“Alpha”的新条目,“Alpha”应该放在第一位。

我的问题是,如何重写compareTo方法来按字母顺序比较两个字符串(字符串“one”,以及传递到方法中的另一个字符串“surname”)?

private ArrayList<Entry> entries=new ArrayList<>();

public void addEntry(String surname, String initial, String number) {
Entry entry=new Entry(surname,initial,number);

if (surname == null || initial == null || number == null)
throw new IllegalArgumentException("Please fill all the required fields, [surname,initials,number]");
else {
boolean flag = false;
for (int x = 0; x < entries.size(); x++) {
String one= entries.get(x).getSurname();

if (one.compareTo(surname)>0) {
entries.add(x,entry);
flag = true;
break;
}
}
if (!flag) {
entries.add(entry);
}
}
}

最佳答案

在我看来,对于这种情况,ArrayList 不是一个正确的选择,您似乎根据 compareTo 在“正确”的位置添加了新的 Entry Entry 类中定义的 方法。

因此,理想情况下应该使用 TreeSet ,它基本上根据 Entry 类中定义的 compareTo 维护元素的顺序,该类是“默认顺序”。

class Entry implements Comparable<Entry>{
private String surname;
private String initial;
private String number;

Entry(String surname, String initial, String number){
this.surname = surname;
this.number =number;
this.initial = initial;
}
@Override
public int compareTo(Entry entry){
return this.surname.compareTo(entry.surname);
}
}

并且 addEntry 方法应该很简单:

private Set<Entry> entries = new TreeSet<>();

public void addEntry(String surname, String initial, String number) {
if (surname == null || initial == null || number == null)
throw new IllegalArgumentException("Please fill all the required fields, [surname,initials,number]");
else {
Entry entry=new Entry(surname,initial,number);
entries.add(entry);
}
}

如果您确实需要 List,只需将 TreeSet 实例包装在 ArrayList 构造函数中即可:

List<Entry> list = new ArrayList(entries); 

关于java - 使用compareTo 方法按字母顺序对ArrayList 中的新条目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com