【问题标题】:Can a Java function save a list before it's changed and recall it when needed?Java 函数可以在列表更改之前保存列表并在需要时调用它吗?
【发布时间】:2015-07-26 06:43:54
【问题描述】:

我有这个功能,在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;
}

【问题讨论】:

  • 当然。只需在修改 List 之前制作一份副本,并将该副本存储在另一个变量中。其中哪一部分给您带来了麻烦?
  • 方法hd()mySub()代表什么?
  • 使用泛型,你可以摆脱(Double) 的所有转换 -- public static List<Double> subCombo(List<Double> l1, List<Double> l2)

标签: java list linked-list


【解决方案1】:

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

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

否则,您将需要制作列表的深层副本Example

【讨论】:

    【解决方案2】:

    您可以从任何其他集合创建一个列表(和其他类型的集合),只需将其传递到列表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()方法,如果你必须,例如,建立一个列表然后复制它。

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

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

    ...但这更适合您可能要返回的列表。

    【讨论】:

    • unmodifiableList 在这种情况下不起作用...重要的是要注意它只返回现有列表的不可修改的 view。对原始列表引用所做的任何更改也将显示在保存的副本中。
    • 好点@Kevin - 我不知道OP的方法真正想要做什么,但我不会修改原始输入参数列表并生成一个返回列表,可能作为不可修改,这就是我想提它的原因。
    猜你喜欢
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多