Java Arraylist排序问题
我正在创建一个Android应用程序,并使用截击通过发帖请求获得一个网页。以及使用Jsoup解析HTML代码。我使用Jsoup选择器来过滤和提取所需的数据。然后我分割数据并存储在字符串数组中。最后,我循环字符串数组并将所有数据存储在数组列表中 现在的问题是,数据是标签和值的形式,我在数组列表中插入了数据,如(在第一个索引“label”和第二个索引“value”),但数组列表顺序不正确。它输出: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,
[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很高兴我能帮上忙。