Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Sorting_Arraylist - Fatal编程技术网

Java Arraylist排序问题

Java Arraylist排序问题,java,arrays,sorting,arraylist,Java,Arrays,Sorting,Arraylist,我正在创建一个Android应用程序,并使用截击通过发帖请求获得一个网页。以及使用Jsoup解析HTML代码。我使用Jsoup选择器来过滤和提取所需的数据。然后我分割数据并存储在字符串数组中。最后,我循环字符串数组并将所有数据存储在数组列表中 现在的问题是,数据是标签和值的形式,我在数组列表中插入了数据,如(在第一个索引“label”和第二个索引“value”),但数组列表顺序不正确。它输出: [Label 1, Label 2, Label 3, Label 4, Label 5,

我正在创建一个Android应用程序,并使用截击通过发帖请求获得一个网页。以及使用Jsoup解析HTML代码。我使用Jsoup选择器来过滤和提取所需的数据。然后我分割数据并存储在字符串数组中。最后,我循环字符串数组并将所有数据存储在数组列表中

现在的问题是,数据是标签和值的形式,我在数组列表中插入了数据,如(在第一个索引“label”和第二个索引“value”),但数组列表顺序不正确。它输出:

[Label 1,  Label 2,  Label 3,  Label 4,  Label 5,  Value 5,  Value 4,   Value 3,  Value 2, Value 1]
所以第一个标签在第一个索引处,第一个值在最后一个索引处。也许有什么不对劲或遗漏了

我已经在Java中创建了简单的示例场景,下面是示例代码:

public static void main(String[] args) {

    ArrayList<String> arrayList = new ArrayList<>();

    String labels = "Label 1: Label 2: Label 3: Label 4: Label 5";
    String values = "Value 1\n Value 2\n  Value 3\n Value 4\n Value 5\n";

    String[] labelsArray = labels.split(":");
    String[] valuesArray = values.split("\n");

    for(int i = 0; i < labelsArray.length; i++){
        arrayList.add(i, labelsArray[i]);
        arrayList.add(i+1, valuesArray[i]);
    }
    System.out.println(arrayList.toString());      
}
publicstaticvoidmain(字符串[]args){
ArrayList ArrayList=新的ArrayList();
String labels=“标签1:标签2:标签3:标签4:标签5”;
String values=“值1\n值2\n值3\n值4\n值5\n”;
字符串[]labelsArray=labels.split(“:”);
字符串[]值ray=values.split(“\n”);
对于(int i=0;i

注:我可以应用一个小的调整,使其工作,但我想知道;实际的问题是什么。

看看你在哪里添加这些项目。当
i
为0时,在0处添加一个标签,然后在1处添加一个
值。然后当
i
为1时,在1处添加一个标签(将
移动到2),然后在2处添加另一个
(在上一个值之前)。当
i
为2时,在2处添加一个标签(在两个标签之后和两个
值之前,这两个值被推高到3),然后在3处添加一个
值,在所有之前的
值之前


考虑使用
add(x)
而不是
add(index,x)

查看添加这些项目的位置。当
i
为0时,在0处添加一个标签,然后在1处添加一个
值。然后当
i
为1时,在1处添加一个标签(将
移动到2),然后在2处添加另一个
(在上一个值之前)。当
i
为2时,在2处添加一个标签(在两个标签之后和两个
值之前,这两个值被推高到3),然后在3处添加一个
值,在所有之前的
值之前


考虑使用
add(x)
而不是
add(index,x)

将每个标签插入位置i,其中i从0到4,并将值插入标签后面的位置i+1。这意味着在第一次迭代中,在索引0处插入标签1,在索引1处插入值1。在下一次迭代中,i=1,因此在索引1处插入标签2,这会自动将值1推送到索引2。然后在索引2处插入值2,将值1进一步向下推到索引3。此时的列表是
标签1标签2值2值1
。这将继续适用于所有其他标签/值对。

将每个标签插入位置i,其中i从0到4,值插入标签后面的位置i+1。这意味着在第一次迭代中,在索引0处插入标签1,在索引1处插入值1。在下一次迭代中,i=1,因此在索引1处插入标签2,这会自动将值1推送到索引2。然后在索引2处插入值2,将值1进一步向下推到索引3。此时的列表是
标签1标签2值2值1
。这将继续适用于所有其他标签/值对。

问题在于,您没有像应该的那样使用
i
变量。这:

for (int i = 0; i < labelsArray.length; i++){
    arrayList.add(i, labelsArray[i]);
    arrayList.add(i+1, valuesArray[i]);
}

问题是您没有像应该的那样使用
i
变量。这:

for (int i = 0; i < labelsArray.length; i++){
    arrayList.add(i, labelsArray[i]);
    arrayList.add(i+1, valuesArray[i]);
}

你正在适当地改变价值观。本质上,您尝试将一个变量用于两个不同的值

在此关键代码块中:

for(int i = 0; i < labelsArray.length; i++){
    arrayList.add(i, labelsArray[i]);
    arrayList.add(i+1, valuesArray[i]);
}

你正在适当地改变价值观。本质上,您尝试将一个变量用于两个不同的值

在此关键代码块中:

for(int i = 0; i < labelsArray.length; i++){
    arrayList.add(i, labelsArray[i]);
    arrayList.add(i+1, valuesArray[i]);
}

要理解为什么会发生这种情况,您需要分解for循环

步骤0:i=0

 arrayList.add(i, "A"); // arrayList contains ["A"]
 arrayList.add(i + 1, "B");  //arrayList contains ["A", "B"]
步骤1:i=1

 arrayList.add(i, "C"); // arrayList contains ["A", "C", "B"]
 arrayList.add(i + 1, "D");  //arrayList contains ["A", "C", "D", "B"]
等等

实际上,您可以像这样从add中删除索引:

  arrayList.add("A");

要理解为什么会发生这种情况,您需要分解for循环

步骤0:i=0

 arrayList.add(i, "A"); // arrayList contains ["A"]
 arrayList.add(i + 1, "B");  //arrayList contains ["A", "B"]
步骤1:i=1

 arrayList.add(i, "C"); // arrayList contains ["A", "C", "B"]
 arrayList.add(i + 1, "D");  //arrayList contains ["A", "C", "D", "B"]
等等

实际上,您可以像这样从add中删除索引:

  arrayList.add("A");

我很惊讶你看到了价值观,除了上一个。每次迭代时,您的值都在增加<代码>添加(0,标签);添加(1,值)
然后执行
添加(1,标签);增加(2,价值)然后<代码>添加(2,标签);增加(3,价值)等等。我很惊讶你居然能看到价值观,除了上一个。每次迭代时,您的值都在增加<代码>添加(0,标签);添加(1,值)
然后执行
添加(1,标签);增加(2,价值)然后<代码>添加(2,标签);增加(3,价值)等。谢谢你,我更喜欢使用它而不指定索引!谢谢,我更愿意使用它而不指定索引!是的,费德里科,这就是问题所在。我花了一整天的时间分析html并从一个非常长的html中选择数据。所以,我有点困惑,没有注意到这个问题。谢谢澄清@Atlas_Gondal很高兴我能帮上忙。是的,费德里科,这就是问题所在。我花了一整天的时间分析html并从一个非常长的html中选择数据。所以,我有点困惑,没有注意到这个问题。谢谢澄清@Atlas_Gondal很高兴我能帮上忙。