如何将容器作为参数传递而不更改其值java?

时间:2016-06-29 15:05:01

标签: java

This programmers stack exchange question启发我对java编程概念容器对象作为指针传入。得知这一点后,由于这个概念,我的代码存在问题。

这是我的代码:

public double findRollingPivots(ArrayList<Double> listOfCurrentPivots, ArrayDeque<Double> dequeOfAllPivots, double rollingPeriodLength) {
   double returnSignal = 0; //this is whatever signal to be returned-- BD BO or profit target
   double containerOfPivots = 0; //this holds all of the pivots to be divided in dequeOfCurrentPivots
   listOfCurrentPivots.remove(4); /***line4***/
   listOfCurrentPivots.add(dequeOfAllPivots.removeLast());

   for (int i = 0; i < rollingPeriodLength; i++) { /***line 6***/
       containerOfPivots += listOfCurrentPivots.get(i);
   }

   returnSignal = containerOfPivots / rollingPeriodLength;

   return returnSignal;

我的问题是,在第4行,我不会总是删除第四个索引处的元素。在removeLast()上调用deque并且每次只调用push新元素会更容易。

但是,如果我使用deque,那么在第6行,当我将它们添加到containerOfPivots变量时,我将丢失所有元素。我试图通过创建一个临时deque来解决这个问题,因此我可以保留参数值,但这也不起作用。那么,有没有办法使用deque而不必担心在函数中耗尽它的大小?我忽略了什么吗?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题(你想避免修改你的功能中的原始列表),你可以复制具有所有相同元素的集合。

List<Double> newList = new ArrayList<Double>();
newList.addAll(listOfCurrentPivots);

newList 所做的任何更改都不会影响 listOfCurrentPivots 中包含的元素。这不会重复我们处理的数据量。每个列表将在内存中引用相同的对象。由于我们处理双打,因此它们是不可变的,所以我们不必担心会修改这些对象的操作。