我有两个ArrayLists:一个String列表和一个整数列表。例如:
Bob 2
Kevin 6
Lane 4
Susan 2
//the ArrayLists will have more elements
我试图对整数ArrayList(使用MergeSort)进行排序,并使String ArrayList对应于整数ArrayList,例如:
Susan 2
Bob 2
Lane 4
Kevin 6
我建议使用Map的其他答案(int是键,String是值);但是,我不能这样做,因为会有重复的密钥。
我读过关于番石榴的Multimap;但是,我不太习惯将jar文件包含在类路径中。
还有其他办法吗?
答案 0 :(得分:4)
只要在字符串和整数之间存在某种有意义的连接,最好的方法是创建一个Java类来满足您的目的,例如:
public class MyClass implements Comparable<MyClass> {
private String myString;
private int myInt;
public MyClass(String s, int x) {
myString = s;
myInt = x;
}
public int getInt() {
return myInt;
}
public String getString() {
return myString;
}
public void setInt(int x) {
myInt = x;
}
public void setString(String s) {
myString = s;
}
// this method is the only method defined in the Comparable<T> interface
// and is what allows you to later do something like Collections.sort(myList)
public int compareTo(MyClass other) {
return myInt - other.getInt();
}
}
然后创建一个列表List<MyClass> ls = new ArrayList<MyClass>();
,您可以将新创建的类的实例添加到。{/ p>
此类实现Comparable接口的事实意味着您可以使用Java的预定义排序方法(如Collections.sort()),并让Collections类知道您希望如何对对象进行排序。相反,如果您希望实现自己的排序算法,则不需要实现此接口,但仍然是良好的实践。
答案 1 :(得分:0)
使用的方法之一是非常简单的hashmap,例如:
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
public class ExStringArraySort {
static HashMap<String, Integer> mapPerson = new HashMap<String, Integer>();
static String[] prsn;
public static void main(String[] args) {
// Add persons
mapPerson.put("Bob", 2);
mapPerson.put("Kevin", 6);
mapPerson.put("Lane", 4);
mapPerson.put("Susan", 2);
String[] prsn = mapPerson.keySet().toArray(new String[mapPerson.size()]);
Arrays.sort(prsn);
System.out.println(Arrays.toString(prsn));
System.out.println("Print detail:");
for (int i = 0; i < prsn.length; i++) {
System.out.println(prsn[i]+"\t"+mapPerson.get(prsn[i]));
}
Arrays.sort(prsn, Collections.reverseOrder());
System.out.println("\n"+Arrays.toString(prsn));
System.out.println("Print detail:");
for (int i = 0; i < prsn.length; i++) {
System.out.println(prsn[i]+"\t"+mapPerson.get(prsn[i]));
}
}
}
<强>输出:强>
[Bob, Kevin, Lane, Susan]
Print detail:
Bob 2
Kevin 6
Lane 4
Susan 2
[Susan, Lane, Kevin, Bob]
Print detail:
Susan 2
Lane 4
Kevin 6
Bob 2