Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排序/创建嵌套的ArrayList_Java_Arrays_Arraylist - Fatal编程技术网

Java 排序/创建嵌套的ArrayList

Java 排序/创建嵌套的ArrayList,java,arrays,arraylist,Java,Arrays,Arraylist,这是我到目前为止的代码,尽管数组的大小需要更改。我需要使用循环向数组添加值;为此,我想我需要使用嵌套的ArrayList。但是,我是否能够像下面一样对ArrayList进行排序,或者是否有一种方法可以添加到此数组 publicstaticvoidmain(最终字符串[]args){ 字符串[][]数据=新字符串[][]{ 新字符串[]{“Roy”,“3”,“12”}, 新字符串[]{“Daniel”,“5”,“22”}, 新字符串[]{“Joe”,“2”,“3”}, 新字符串[]{“Ryan”,

这是我到目前为止的代码,尽管数组的大小需要更改。我需要使用循环向数组添加值;为此,我想我需要使用嵌套的ArrayList。但是,我是否能够像下面一样对ArrayList进行排序,或者是否有一种方法可以添加到此数组

publicstaticvoidmain(最终字符串[]args){
字符串[][]数据=新字符串[][]{
新字符串[]{“Roy”,“3”,“12”},
新字符串[]{“Daniel”,“5”,“22”},
新字符串[]{“Joe”,“2”,“3”},
新字符串[]{“Ryan”,“4”,“4”},
新字符串[]{“Leroy”,“2”,“5”},
新字符串[]{“Smith”,“1”,“6”},};
sort(数据,新的比较器(){
@凌驾
公共整数比较(字符串[]entry1,最终字符串[]entry2){
字符串st1=entry1[2];
字符串st2=entry2[2];
int n1=整数.parseInt(st1);
int n2=整数.parseInt(st2);
返回整数。比较(n2,n1);
}
});
对于(字符串[]s:数据){
System.out.println(s[0]+“”+s[1]+“”+s[2]);
}
}

是的,似乎没什么问题。将
data
的类型更改为
Arraylist
(一个或多个字符串数组),而不是
String[][]
(一个字符串数组数组)。所以这看起来像:

public static void main(final String[] args) {

     ArrayList<String[]> data = new ArrayList<String[]>();
     data.add(new String[] { "Roy","3", "12" });
     data.add(new String[] { "Daniel","5", "22" });
     data.add(new String[] { "Joe","2", "3" });
     data.add(new String[] { "Ryan","4", "4" });
     data.add(new String[] { "Leroy","2", "5" });
     data.add(new String[] { "Smith","1", "6" });

     Collections.sort(data, new Comparator<String[]>() {
        @Override
        public int compare(String[] entry1, final String[] entry2) {
             String st1 = entry1[2];
             String st2 = entry2[2];
             int n1 = Integer.parseInt(st1);
             int n2 = Integer.parseInt(st2);
             return Integer.compare(n2, n1);
        }
    });

    //Other stuff...
}
publicstaticvoidmain(最终字符串[]args){
ArrayList数据=新的ArrayList();
添加(新字符串[]{“Roy”,“3”,“12”});
添加(新字符串[]{“Daniel”,“5”,“22”});
add(新字符串[]{“Joe”,“2”,“3”});
添加(新字符串[]{“Ryan”,“4”,“4”});
添加(新字符串[]{“Leroy”,“2”,“5”});
添加(新字符串[]{“Smith”,“1”,“6”});
Collections.sort(数据,新比较器(){
@凌驾
公共整数比较(字符串[]entry1,最终字符串[]entry2){
字符串st1=entry1[2];
字符串st2=entry2[2];
int n1=整数.parseInt(st1);
int n2=整数.parseInt(st2);
返回整数。比较(n2,n1);
}
});
//其他东西。。。
}
也许您的意思是希望内部字符串数组具有动态大小。这也没问题,它的筑巢方式和你想象的完全一样

public static void main(final String[] args) {

     String[][] rawData = new String[][] {
        new String[] { "Roy","3", "12" },
        new String[] { "Daniel","5", "22" },
        new String[] { "Joe","2", "3" },
        new String[] { "Ryan","4", "4" },
        new String[] { "Leroy","2", "5" },
        new String[] { "Smith","1", "6" }};

     ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
     for(String[] arr : rawData){
         ArrayList<String> a = new ArrayList<String>();
         data.add(a);
         for(String s : arr){
             a.add(s);
         }
     }

     Collections.sort(data, new Comparator<ArrayList<String>>() {
        @Override
        public int compare(ArrayList<String> entry1, ArrayList<String> entry2) {
             String st1 = entry1.get(2);
             String st2 = entry2.get(2);
             int n1 = Integer.parseInt(st1);
             int n2 = Integer.parseInt(st2);
             return Integer.compare(n2, n1);
        }
    });

    //Other stuff...
}
publicstaticvoidmain(最终字符串[]args){
字符串[][]原始数据=新字符串[][]{
新字符串[]{“Roy”,“3”,“12”},
新字符串[]{“Daniel”,“5”,“22”},
新字符串[]{“Joe”,“2”,“3”},
新字符串[]{“Ryan”,“4”,“4”},
新字符串[]{“Leroy”,“2”,“5”},
新字符串[]{“Smith”,“1”,“6”};
ArrayList数据=新的ArrayList();
for(字符串[]arr:rawData){
ArrayList a=新的ArrayList();
数据.添加(a);
用于(字符串s:arr){
a、 添加(s);
}
}
Collections.sort(数据,新比较器(){
@凌驾
公共整数比较(ArrayList entry1,ArrayList entry2){
字符串st1=entry1.get(2);
字符串st2=entry2.get(2);
int n1=整数.parseInt(st1);
int n2=整数.parseInt(st2);
返回整数。比较(n2,n1);
}
});
//其他东西。。。
}

在这两种情况下,您都应该小心比较器访问索引
2
。如果数组(或arraylist)的长度仅为1,会发生什么情况?在这种情况下,您希望比较器做什么?它们是字符串列表,希望是整数,但可能不是。如果比较器试图将12与“hello”进行比较,您希望比较器做什么?

数据
声明为
列表
(或
数组列表
),并使用
集合.排序
进行排序。你甚至可以使用相同的比较器。谢谢你的解释