【问题标题】:How to swap entries efficiently in an Integer ArrayList in javajava - 如何在Java中的Integer ArrayList中有效地交换条目
【发布时间】:2017-04-05 19:03:41
【问题描述】:

如果我有一个整数数组,我可以使用以下高效代码来切换元素 1 和 5,并打印新数组: (假设在main方法中,整数数组是{1,2,3,4,5},所以调用下面的方法时,会返回{5,2,3,4,1})

        public static int[] SwitchEnds(int[] nums){
        nums[0]=(nums[0]+nums[4])-(nums[4]=nums[0]);
        return nums;
        }

我可以为 ArrayList 做类似的事情吗?我尝试了以下代码(之前代码的精确副本,但使用了与 ArrayList 相关的命令):

       ArrayList<Integer> nums=new ArrayList<Integer>();
       for (int i=1;i<=5;i++){nums.add(i);}
       nums.get(0)=(nums.get(0)+nums.get(4))-(nums.get(4)=nums.get(0));

错误是第 3 行的左侧必须是一个变量。我理解这个错误,但我不知道如何纠正这个错误。

最后,我也可以对字符串数组做类似的事情吗?下面的代码说明了这个问题:

       String[]a={"java","is","cool"};
       a[0]=(a[0]+a[2])-(a[2]=a[0]);
       return a;

(我想得到结果{"cool","is","java"}) 谢谢!

【问题讨论】:

  • 请告诉我为什么你会使用该代码来交换条目,为什么你认为它更有效? 没有人会理解数组交换代码。
  • 为什么不只取索引 0 和索引大小之间的差异,然后从索引 0 中减去差异,然后将其添加到索引大小中?
  • 好吧,假设我有 {1,2,3,4,5......,1000},我想获得 {1000,999...,5,4,3 ,2,1},我可以创建一个 for 循环来运行 500 次。或者,我可以创建 500 个临时变量并替换;不用说,这是低效的。我是一个初学者程序员,所以这就是我所知道的;如果您知道,请提出另一种有效的方法
  • @BharadwajViswanathan:你不需要 500 个变量,你只需要一个。

标签: java arrays arraylist


【解决方案1】:

你可以使用Collections.swap 方法

【讨论】:

    【解决方案2】:

    使用set 修改ArrayList 的值:

    nums.set(0, (nums.get(0)+nums.get(4))-(nums.set(4,nums.get(0));
    

    然而,这段代码很难理解,我怀疑这(以及额外的算法)是否值得保存一个交换变量。

    对于Strings,未定义- 运算符。但是你可以使用substring 方法。但这会让事情变得更加复杂。

    【讨论】:

      【解决方案3】:

      因为它们是Integers,你可以像这样在数学上交换它们:

      int diff = nums[0] - nums[nums.length-1];
      nums[0] = nums[0] + diff;
      nums[nums.length-1] = nums[nums.length-1] - diff;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-25
        • 2011-01-09
        • 2013-07-05
        • 1970-01-01
        • 2014-07-24
        相关资源
        最近更新 更多