Java函数可以在更改之前保存列表并在需要时调用它吗?

时间:2015-05-14 15:13:45

标签: java list linked-list

我有这个功能,在newList1我想要在开头插入原始的l1newList2l2也是如此。有什么建议我怎么做?

 public static List subCombo(List l1, List l2)
    {
    List newList1= new LinkedList();
    List newList2= new LinkedList();    
    List list1= new LinkedList();

    while (!l1.isEmpty())
    {                   
        for (Object o: l2)
        {
            Double product=1.0;

            if ((Double)hd(l1) == 0.0 && (Double)hd(l2)!=0.0)
            {
                product = (1-mySub(newList1))*(Double)hd(l2); 
                list1.add(product);         
            }               
            if ((Double)hd(l1)!=0.0 && (Double)hd(l2) == 0.0)
            {
                product= (1-mySub(newList2))*(Double) hd(l1);
                list1.add(product);

            }
             if ((Double)hd(l2) == 0.0 && (Double)hd(l1)==0.0)
            {                
                product= (1-mySub(newList1))*(1-mySub(newList2));
                list1.add(product);

            }
             if ((Double)hd(l1) != 0.0 && (Double)hd(l2)!=0.0)
            {
                 product=(Double)hd(l1)*(Double)hd(l2);         
                 list1.add(product); 
            }       
            l2=tl(l2);              
        } 
        l1=tl(l1);  
    }   
    return list1;
}

2 个答案:

答案 0 :(得分:1)

只要您不修改容器中包含的对象,您可以在修改之前复制列表:

List newList1 = new LinkedList(l1);
List newList2 = new LinkedList(l2);

否则,您需要制作列表的深层复制Example

答案 1 :(得分:0)

您只需将其传递到列表constructor中即可从任何其他集合创建列表(和其他类型的集合):

public static List subCombo(List<Double> l1, List<Double> l2)
{
    // save a copy of the original "l1" list.
    List<Double> savedList = new LinkedList<>( l1 );

    // etc.

}

如果您必须构建列表然后复制它,还有addAll()方法。

最后,您可以创建一个列表的unmodifiableList副本,以确保它永远不会被更改:

List<Double> savedCopy = Collections.unmodifiableList( l1 );

...但这对于您可能会返回的列表更合适。