【问题标题】:Return Two Arraylists or Use Two Different Methods返回两个数组列表或使用两种不同的方法
【发布时间】:2014-08-14 11:28:27
【问题描述】:

如果我有方法

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

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

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

谢谢

【问题讨论】:

    标签: java arraylist set performance


    【解决方案1】:

    如果您在necessaryChanges 方法中修改setToCheck 对象,则更改在该方法之外也将可见,因为在Java 中,所有内容(不包括原始类型,但不是您的情况)都作为引用传递。

    所以基本上你不需要返回 setToCheck 对象:在方法调用之后你仍然可以简单地使用它:它始终是同一个对象(在方法内部和外部),因此它将包含新的更改。

    【讨论】:

    • in Java everything is passed as reference 讨论公司 :)
    【解决方案2】:

    根据您的问题描述,您不需要return 两个对象。您只需创建和returnArrayList 并就地更改setToCheck。由于setToCheck 是一个对象引用,因此方法内部对对象所做的任何更改都将在外部可见。

    【讨论】:

    • 我认为私有方法可能是个好主意,但我不建议将它用于公共方法。
    • 那么当我在方法之外创建 Set 时,当它在另一个类中更改时,它也在方法之外更改?
    • @hat_to_the_back,是的。它与您在方法之间传递的 Set 对象相同。
    【解决方案3】:

    正如其他人所指出的,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;
        }
    

    【讨论】:

      猜你喜欢
      • 2019-08-23
      • 1970-01-01
      • 2012-01-17
      • 2016-01-28
      • 1970-01-01
      • 2013-04-17
      • 2023-03-14
      • 2013-05-13
      • 1970-01-01
      相关资源
      最近更新 更多