如何在Java中的不同ArrayLists中对应元素

时间:2017-06-15 23:29:30

标签: java arraylist maps

我有两个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文件包含在类路径中。

还有其他办法吗?

2 个答案:

答案 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