有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

列出在Java中使用的LinkedList add方法

LinkedList<CasosPossiveis> casos = new LinkedList<>();
CasosPossiveis objeto = new CasosPossiveis();

for (int i=0; i<10; i) {
    //modifying objeto values here
    casos.add(objeto);
}

每次我修改objeto值时,casos的每个位置都会被修改。我相信casos.add(objeto)正在使用objeto的引用。我需要的是每次我向casos添加新对象并修改objeto,它都不会修改已经添加到列表中的值

例如:

objeto.setId=1;
casos.add(objeto);
objeto.setId=2;
casos.add(objeto);

我在打印casos时的期望:

1, 2

我的代码是什么:

2, 2

共 (4) 个答案

  1. # 1 楼答案

    如果要在每个casos中添加相同的对象,请尝试以下操作:

      LinkedList<CasosPossiveis> casos = new LinkedList<>();
    
         for (int i=0; i<10; i) {
         CasosPossiveis   objeto = new CasosPossiveis();
         //modifying objeto values here
          casos.add(objeto);
     }
    
  2. # 2 楼答案

    在列表中添加相同的CassosPositives类实例,在列表中的每个位置都有多个指向相同对象的链接,而每次将类放入列表时都需要创建新的类实例:

    类casospositive应类似于:

    public class CassosPositives {
        private int id;
    
        CassosPositives(int id) {
            this.id = id;
        }
    
        public int getId() { 
            return id; 
        }
    
        public void setId(int id) { 
            this.id = id; 
        }
    
    }   
    

    范例 (java 8路)

            // create list of CassosPositives
            List<CassosPositives> casos = IntStream.iterate(0, i -> i + 1)
                                                    .limit(10)
                                                    .map(i -> new CassosPositives(i))
                                                    .collect(Collectors.toList());
            //print list of CassosPositives
            casos.forEach(caso -> System.out.println(caso.getId()));    
    

    范例 (java 7路)

        // create list of CassosPositives
        List<CassosPositives> casos = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            casos.add(new CassosPositives(i));
        }
    
        //print list of CassosPositives
        for(CassosPositives caso : casos) {
            System.out.println(caso.getId());
        }
    
  3. # 3 楼答案

    小错误。您只创建了一次CasosPossiveis的对象。当java运行此代码时,它会在for循环之前创建对象

    现在,当处理for循环时,它将使用同一对象10次。因此具有相同的价值。 所以,对于每次获取新对象,您需要在每次循环运行时创建对象

    如果发生这种情况—— 写 CasosPossiveis objeto=新的CasosPossiveis(); 内部为循环

  4. # 4 楼答案

    您有一个对象objecto,可以多次将其添加到列表中。如果希望列表包含不同的实例,则必须创建新实例:

    for (int i=0; i<10; i) {
        // Use a new instance in every iteration
        CasosPossiveis objeto = new CasosPossiveis();
    
        //modifying objeto values here
    
        casos.add(objeto);
    }