temp = a.get(i - 1); 这个是浅拷贝,简单来说a.set(i, temp);这两行执行完了,i和i-1两行指向同一个对象,而你循环里面对i-1的修改,其实作用在了i上。
用迭代器遍历List,iterator