所以我将数组添加到我的arraylist中,我想让它按数组的第二个元素排序,这是可能的,这是我编写的代码,但没有返回正确的输出,
[5.0, 0.0, 2.0]
[1.0, 2.0, 0.0]
[2.0, 5.0, 0.0]
[3.0, 3.0, 0.0]
[0.0, 8.0, 2.0]
public void add(double[] k){
if(a.size()==0){
a.add(k);
}
else if(k[1]<=a.get(0)[1]){
a.add(0,k);
}
else if(k[1]>a.get(0)[1]) {
int i =0;
while(a.get(i)[1]<k[1] && i<a.size()-1){
i++;
}
a.add(i+1,k);
}
length++;
}
public void apr(){
for(int i=0; i<a.size(); i++)
System.out.println(Arrays.toString(a.get(i)));
}
public static void main(String args[]){
double k[]= {1,2,0};
double k1[]= {2,5,0};
double k2[] = {3,3,0};
double k3[] = {5,0,2};
double k4[] = {0,8,2};
Sample amostra1 = new Sample();
amostra1.add(k);
amostra1.add(k1);
amostra1.add(k2);
amostra1.add(k3);
amostra1.add(k4);
amostra1.apr();
第一行输出是不正确的,我希望数组按照第二个组件或第一个组件进行排序,只需对代码进行一点修改即可
答案 0 :(得分:0)
我会这样做,使用ArrayList的自定义比较器:
Collections.sort(amostra1, new Comparator<double[]>() {
@Override
public int compare(double[] o1, double[] o2) {
int index = 1; // second element of the array
return Double.compare(o1[index], o2[index]);
}
});
要根据数组的第一个元素进行排序,只需将index设置为0,然后根据第一个元素对数组进行排序。
请注意,Collections.sort(...)采用列表和比较器
答案 1 :(得分:0)
我最后写了一个&#34;排序&#34;我的添加功能的算法,因为我的样本是一个arraylist,我不能列出一个列表,所以这里是我最终做的,是&#34; a&#34;我的arraylist,后来定义为样本。上述算法存在一些问题,因为它没有考虑插入比列表的最后一个更小的元素,或插入列表的中间。这由第一个组件排序,但是如果你将a.get(i)[0]更改为a.get(i)[1],它会按秒排序,感谢你的帮助;)
public void add(double[] k){
if(a.size()==0 || a.get(0)[0]>k[0]){
a.add(0,k);
}
else {
int i=0;
while(a.get(i)[0]<k[0]&& i<a.size()-1){
i++;
}
if(i==a.size()-1 && a.get(i)[0]>k[0] ||(i!=a.size()-1 && a.get(i)[0]>k[0]) ){
a.add(i,k);
}
else if(i==a.size()-1 && a.get(i)[0]<k[0] || (i!=a.size()-1 && a.get(i)[0]<k[0])){
a.add(i+1,k);
}
}
length++;
}