返回两个Arraylists或使用两种不同的方法

时间:2014-08-14 11:28:28

标签: java arraylist set performance

如果我有方法

 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的变化。我知道你不能在一个方法中返回两个对象。 我要问的是这样做的最有效方法是什么。

我知道我可以在主类中创建另一个方法并调用它来更改集合,但它似乎效率很低。

有没有更好的方法来做到这一点。

由于

3 个答案:

答案 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;
    }