如果我有方法
public ArrayList<String> necessaryChanges(Set<Object> setToCheck ) {
//checks to see whether each element of set is correct by comparing it to something
// and if it needs to be changed its added to an arraylist to be returned to the user
}
我需要返回一个包含必要更改的列表,这很好。
但我也想修改setToCheck的变化。我知道你不能在一个方法中返回两个对象。 我要问的是这样做的最有效方法是什么。
我知道我可以在主类中创建另一个方法并调用它来更改集合,但它似乎效率很低。
有没有更好的方法来做到这一点。
由于
答案 0 :(得分:5)
如果修改setToCheck
方法中的necessaryChanges
对象,那么更改将在该方法之外也可见,因为在Java中所有内容(原始类型排除,但不是你的情况)都会被传递作为参考。
所以基本上你不需要返回 setToCheck
对象:你可以在方法调用之后仍然使用它:它总是相同的对象(方法的内部和外部) ),因此它将包含新的变化。
答案 1 :(得分:1)
根据您的问题描述,您不需要return
两个对象。您只需创建并return
ArrayList
并对setToCheck
就地进行修改即可。由于setToCheck
是对象引用,因此对方法内对象所做的任何更改都将在外部可见。
答案 2 :(得分:1)
正如其他人所指出的,Java是通过引用传递的。因此,如果您在setToCheck中更改对象,它将在内存中更改,因此除了更改对象引用之外无需执行任何操作。例如......
public List<String> neccessaryChanges(Set<Object> setToCheck) {
List<String> changeList = new ArrayList<String>();
Iterator<Object> iterator = setToCheck.iterator();
while(iterator.hasNext()) {
Object objectToCheck = iterator.next();
if(objectMustChange) {
//once you change the object here, it will change
//in setToCheck since objectToCheck now equals something
//different and setToCheck still has reference to
//objectToCheck
objectToCheck = new String();
changeList.add((String) objectToCheck);
}
}
return changeList;
}