Android如何根据另一个数组的整数排序数组

时间:2014-10-27 12:25:10

标签: java arrays

基本上我有两个数组,每个数组都填充相同数量的值(尽管每个数组中的值的数量将保持不变,这些值的数量可以增加或减少等。)

第一个数组列表有一个名称列表,例如

  • 萨姆
  • 迪安
  • 爱丽丝
  • 史蒂夫

第二个数组列表有一个索引位置列表,我希望上面的项目与第三个列表数组一起存储,例如。

第二个数组索引位置。

  • 3
  • 2
  • 5
  • 1
  • 4

我使用了arraylists如下: ArrayList namelist = new ArrayList();

2 个答案:

答案 0 :(得分:1)

只需使用名称对列表进行排序即可。您可以使用Collections.sort(),因为字符串是可比较的。然后创建新列表,按索引的顺序添加字符串。

List<String> newList = new ArrayList<>(); // or new ArrayList<String>(); for source level below 1.7
Collections.sort(nameslist);

for(Integer idx : indexList)
{
    newList.add(nameslist.get(idx - 1));
}

答案 1 :(得分:1)

您必须创建与其他两个相同大小的第三个数组。然后你必须使用intArray的值作为sortedStrArray的索引,如下所示:

public class JavaApplication
{
    // Utilisation
    public static void main(String[] args)
    {
        // The arrays are just here to make the initialization shorter. 
        // You can initialize strArrayList and
        // intArrayList from the beginning with the add method if you want.
        String strArray[] = new String[] { "Sam", "Dean", "Alice", "Jane", "Steve" };
        Integer intArray[] = new Integer[] { 3, 2, 5, 1, 4 };

        // Put array data in ArrayLists
        List<String> strArrayList = new ArrayList<String>(Arrays.asList(strArray));
        List<Integer> intArrayList = new ArrayList<Integer>(Arrays.asList(intArray));

        List<String> sortedList = sortArrayListByIndices(strArrayList, intArrayList);

        // Output order should be: Jane, Dean, Sam, Steve, Alice
        for(String str : sortedList)
        {
            System.out.println(str);
        }
    }

    // Implementation
    public static List<String> sortArrayListByIndices(List<String> strArrayList, 
                                                      List<Integer> intArrayList)
    {
        String sortedStrArray[] = new String[strArrayList.size()];

        int i = 0;
        for(String str : strArrayList) // Iterator is better style
        {
            // indices start with 1, array starts with 0
            final int index = intArrayList.get(i) - 1; 

            sortedStrArray[index] = str;
            i++;
        }

        return new ArrayList<String>(Arrays.asList(sortedStrArray));
    }
}

现在所需的算法有自己的方法,我编写了一个利用/测试它的小程序。