java - 反转 ArrayList 的顺序并合并两个 ArrayList

标签 java arrays arraylist merge

所以我想做的是将 Array 类中的一些方法从常规数组转换为 ArrayList。然而,我遇到了两个不同的问题。首先,在反转 ArrayList 的顺序时,我注意到奇怪的是,它会打印出,如果我有 6 个整数,并且我尝试反转,它会打印出前 3 个整数的索引位置以及该整数的实际整数。最后3。例如它将打印出:逆序:5,4,3,96,87,24,中序:false。我希望它打印出的是 941, 874, 102, 96, 87, 24,按顺序: false。关于两个数组列表的合并,我不确定它是否会正确合并,因为我不确定如何转换这行代码以打印出 ArrayList。我最初使用这两行代码打印出我的合并数组。

int merged[] = merge(num3,num4);
print(merged);

以下是我用来反转 arrayList 的方法以及合并两者的方法:

  /***        <<< CODE NOT COMPLETE >>>
   * reverses the order of the elemets in the array 
   ***/
  public static void reverse(ArrayList <Integer> a)
   {
       for (int i = 0; i < a.size()/2; i++)
       {
           int reverseOrder = a.get(i);
           a.set(i, a.size() - 1 - i);
           a.set(a.size() - 1 - i, reverseOrder);
       }
   } 

   /***        <<< CODE NOT COMPLETE >>>
   * merges two sorted arrays into 1 new array, maintains the sorted order 
   ***/
   public static ArrayList <Integer> merge (ArrayList <Integer> a, ArrayList <Integer> b) 
   {
       ArrayList <Integer> merge = new ArrayList <Integer> (a.size() + b.size());
       int i = 0, j = 0, k = 0;

       while (i < a.size() && j < b.size())
       {
            if (a.get(i) < b.get(j))
            {
                merge.set(k++, a.get(i++));
            }

            else        
            {
                merge.set(k++, b.get(j++));
            }
       }

       while (i < a.size())
       {
           merge.set(k++, a.get(i++));
       }

       while (j < b.size())  
       {
           merge.set(k++, b.get(i++));
       }

       return merge;
   }

最佳答案

public static void reverse(ArrayList <Integer> a) ,这个

a.set(i, a.size() - 1 - i); // <-- the index, not the value.
a.set(a.size() - 1 - i, reverseOrder);

应该是

a.set(i, a.get(a.size() - 1 - i)); // <-- the value.
a.set(a.size() - 1 - i, reverseOrder);

您的 merge 中也有一个拼写错误。 ,您在哪里使用 i++在最后一个循环中。但实际上,您应该更喜欢 List界面。另外,你不需要kList保留内部索引。您也不需要明确调整 List 的大小(但我在这里这样做是为了与您的代码保持一致)。而且,我会存储 size (s)。就像,

public static List<Integer> merge(List<Integer> a, List<Integer> b) {
    final int aLen = a.size(), bLen = b.size();
    List<Integer> al = new ArrayList<>(aLen + bLen);
    int i = 0, j = 0;
    while (i < aLen && j < bLen) {
        if (a.get(i) < b.get(j)) {
            al.add(a.get(i++));
        } else {
            al.add(b.get(j++));
        }
    }
    while (i < aLen) {
        al.add(a.get(i++));
    }
    while (j < b.size()) {
        al.add(b.get(j++));
    }
    return al;
}

关于java - 反转 ArrayList 的顺序并合并两个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40825670/

相关文章:

ArrayList处理中的java.util.ConcurrentModificationException

java - 验证枚举值仅出现一次

java - 对于 java 上的幻想草稿程序,我如何将数据从文本文件加载到单独的 ArrayList 列表中?

java - 比较 JUnitTesting 中的 HashMap

java - 如何在 GridPane 中对齐 ListView 基线

java - 从 GraphicsContext 中删除剪裁

java - 如何在我的自动完成应用程序中创建建议列表?

php - 如何在字符串中的某个字符之后按字母顺序对php数组进行排序

php - 数组到字符串转换错误

c - 使用结构体和数组