我有一个由字符串组成的二维字符串数组,如
{ "Home","0.1256784"
"Contact","-0.56789"
"Refer","1.36589"
"Next","3.678456" }
我必须根据第二个元素(double值)对数组进行排序,并获得类似
的结果{"Contact","-0.56789"
"Home","0.1256784"
"Refer","1.36589"
"Next","3.678456" }
我已经使用了一些冒泡排序代码对它进行排序并且它可以正常工作,但是我必须知道如何以更快的方式使排序比我的排序更有效。我尝试了之前发布的与我的相关问题的代码但我无法完成任务。
我的代码:
String tt="",tk="";
for(int i=1;i<myarray.length;i++)
{
for(int j=1;j<myarray.length-1;j++)
{
if(Double.parseDouble(myarray[i][1])<Double.parseDouble(myarray[j][1]))
{
tk=myarray[i][1];
tt=myarray[i][0];
myarray[i][1]=myarray[j][1];
myarray[i][0]=myarray[j][0];
myarray[j][1]=myarray;
myarray[j][0]=myarray;
}
}
}
答案 0 :(得分:1)
如果它是一个二维数组,你可以使用Array.sort(String[], Comparator<String[]> comparator)
并传递一个自定义比较器,它比较子数组的第二个元素。
答案 1 :(得分:1)
您可以使用Arrays.sortsort(Object[] a, Comparator c)
让java来处理它。您可能会发现此link有用
答案 2 :(得分:1)
public class Sort2D {
public static void main(String args[]) {
String ss[][] = {
{"Home", "0.1256784"},
{"Contact", "-0.56789"},
{"Refer", "1.36589"},
{"Next", "3.678456"}
};
Arrays.sort(ss, new Comparator<String[]>() {
public int compare(String[] s1, String[] s2) {
double d1 = Double.parseDouble(s1[1]);
double d2 = Double.parseDouble(s2[1]);
return Double.compare(d1, d2);
}
});
for (String[] s : ss) {
System.out.println(s[0] + ": " + s[1]);
}
}
}
答案 3 :(得分:0)
替代方法:您可以将数据复制到TreeMap(如果所有双值都是唯一的),并让地图进行排序:
Map<Double, String> map = new TreeMap<Double, String>();
for (String[] row:myArray) {
map.put(Double.parseDouble(row[1]), row[1]);
条目集迭代器现在以升序排序顺序返回值。