基本上我有两个数组,每个数组都填充相同数量的值(尽管每个数组中的值的数量将保持不变,这些值的数量可以增加或减少等。)
第一个数组列表有一个名称列表,例如
第二个数组列表有一个索引位置列表,我希望上面的项目与第三个列表数组一起存储,例如。
第二个数组索引位置。
我使用了arraylists如下: ArrayList namelist = new ArrayList();
答案 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));
}
}
现在所需的算法有自己的方法,我编写了一个利用/测试它的小程序。