public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));

}为什么执行上面代码会把list数组的两个元素的位置会交换,我看了很久没看懂,这是Java。util.Colections类的方法,帮忙解释下

解决方案 »

  1.   

    l.set(i, l.set(j, l.get(i)));这条语句分两步执行:
    (1)l.set(j, l.get(i))   //将j位置的值设为i位置的值,并返回j位置原来的值
    (2)将i位置的值设为(1)里返回的值,也就是j位置原来的值
      

  2.   

    看API说明:set
    E set(int index,
          E element)用指定元素替换列表中指定位置的元素(可选操作)。 参数:
    index - 要替换的元素的索引。
    element - 要在指定位置存储的元素。 
    返回:
    以前在指定位置的元素。 
    抛出: 
    分两个操作:
    Object obj = l.set(j, l.get(i);//通过API知道,这是返回原来在j位置上的对象.
    然后就是
    list.set(i,obj);//原来j位置的对象放到i位置上
      

  3.   

    set E set(int index, E element)
    用指定元素替换列表中指定位置的元素(可选操作)。 参数:
    index - 要替换的元素的索引
    element - 要在指定位置存储的元素 
    返回:
    以前在指定位置的元素 
    这是set方法的API 中文的 楼主看看就明白了吧
      

  4.   

    一楼的
    我就是这点没搞懂,为什么会把j原来的值也会返回去呢,set方法不就是为特定位置赋值吗,里面j都赋值了,不就改变了吗