如何在java中的Integer ArrayList中有效地交换条目

时间:2017-04-05 19:03:41

标签: java arrays arraylist

如果我有一个整数数组,我可以使用以下有效代码来切换元素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数组做类似的事情吗?下面的代码说明了这个问题:

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

(我想获得结果{&#34;很酷&#34;,&#34;是&#34;,&#34; java&#34;}) 谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用Collections.swap方法

答案 1 :(得分:0)

因为它们是Integer,所以你可以在数学上交换它们:

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

答案 2 :(得分:0)

使用set修改ArrayList的值:

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

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

对于String s,未定义-运算符。但您可以使用substring方法。但这会使它变得更加复杂。