如何在不创建新对象的情况下交换Java Vector中的两个元素?
解决Java中Vector元素引用交换的问题(C++转Java新手指南)
你遇到的报错核心原因是:Java里的Vector.elementAt(i)是返回指定索引元素的方法,它的返回值是一个临时值,不能作为左值被赋值——这和C++中v[i]可以直接读写的逻辑完全不同。
正确的swap方法实现
要交换Vector中两个位置的对象引用,你需要用Vector提供的set(int index, E element)方法来修改指定索引的元素,修改后的swap方法如下:
void swap(int i, int j) { vertex temp = v.elementAt(i); v.set(i, v.elementAt(j)); v.set(j, temp); }
关键说明
- 这个操作不会创建新的vertex对象,只是交换了Vector内部两个索引位置上的对象引用,完全满足你“不能创建新对象、不影响算法运行”的要求。
- 额外提示:如果你的场景不需要线程安全,推荐用
ArrayList替代Vector,两者用法几乎一致,ArrayList的get(int index)对应Vector.elementAt(i),set方法用法相同,性能会更优。
原代码错误点解释
你原来写的:
v.elementAt(i)=v.elementAt(j); v.elementAt(j)=temp;
在Java里是非法的,因为elementAt()返回的是对象的引用值,不是可被赋值的变量,必须通过set方法来完成Vector元素的修改。
内容的提问来源于stack exchange,提问作者KKS
相关产品推荐
相关产品推荐

