如何在java中从ArrayList创建新集合

如何在java中从ArrayList创建新集合,java,arraylist,Java,Arraylist,我想对ArrayList进行排序,排序应该在ArrayList的副本上进行 我已经尝试了以下内容,但它是排序一个原始列表,无论我对排序列表所做的更改,它也反映在原始列表中 List <Stud> list = new ArrayList<>(); list.add( new Stud(1,"Sachin") ); list.add( new Stud(2,"Niteen") ); Set <Stud> set = new HashSet<>(

我想对ArrayList进行排序,排序应该在ArrayList的副本上进行

我已经尝试了以下内容,但它是排序一个原始列表,无论我对排序列表所做的更改,它也反映在原始列表中

List <Stud>  list = new ArrayList<>();
list.add( new Stud(1,"Sachin")  );
list.add( new Stud(2,"Niteen")  );
Set <Stud> set = new HashSet<>( list );
Stud s = set.iterator().next();
System.out.println( "S:"+s );
s.setRoll( 10 );
System.out.println( "list: "+list );
System.out.println( "set : "+set );
List List=new ArrayList();
列表。添加(新螺柱(1,“Sachin”);
列表。添加(新螺柱(2个“Niteen”);
Set Set=新哈希集(列表);
studs=set.iterator().next();
System.out.println(“S:+S”);
s、 设置辊(10);
System.out.println(“列表:+list”);
System.out.println(“set:+set”);
在arraylist和set中都设置了第10卷,如何避免这种情况。
如果您解释它发生的原因,这会很有帮助。

当您对集合使用复制构造函数时,它会创建新集合并添加旧集合中的所有元素。您需要的是复制元素,为此使用forEach()并创建元素的副本。

List List=new ArrayList();
    List <Stud>  list = new ArrayList<>();
    list.add( new Stud(1,"Sachin")  );
    list.add( new Stud(2,"Niteen")  );
    Set <Stud> set = new HashSet<>();
    //copy using forEach
    for(Stud s : list){
        set.add(new Stud(s.getRoll(),s.getName()));
    }
    Stud s = set.iterator().next();
    System.out.println( "S:"+s );
    s.setRoll( 10 );
    System.out.println( "list: "+list);
    System.out.println( "set : "+set );
列表。添加(新螺柱(1,“Sachin”); 列表。添加(新螺柱(2个“Niteen”); Set=newhashset(); //使用forEach复制 用于(螺柱:列表){ 添加(新螺柱(s.getRoll(),s.getName()); } studs=set.iterator().next(); System.out.println(“S:+S”); s、 设置辊(10); System.out.println(“列表:+list”); System.out.println(“set:+set”);

我不确定你的项目,但这似乎是唯一的方法。您正在创建两个对象,并在两个不同的集合实例中使用相同的对象。即使集合实例不同,下划线对象也是相同的。因此,如果您更改其一个属性,它将反映在您使用的所有集合实例中。因此,通过引用上面给出的新Stud对象来克隆它们的唯一方法。

您已经在两个集合中添加了相同的
Stud
实例。也许你应该在其他事情上调用
setRoll
(将可变数据与学生的(?)身份信息分开)。也许这台电视机应该只有身份证号码?如果你不了解你的项目,很难说。看看这里:标题与你的问题没有关系