我知道java中的List保证维护订单,但Collection不是。
我的问题是,如果我有一个list1,并且我将该list1分配给一个集合,然后我将该集合转换为List list2,那么list2与list1的顺序是否相同?
或者它可以丢失订单,因为它在某个时候作为一个集合被包围了?
谢谢大家的帮助。
答案 0 :(得分:4)
你混淆了两个概念:
换句话说;当然,编译器允许你写:
List<Whatever> stuff = new ArrayList<>();
stuff.add(whatever);
Collection<Whatever> stuffInCollection = stuff;
Object loosingAllTypeInformation = stuffInCollection;
List<Whatever> castingBack = (List<Whatever>) loosingAllTypeInformation;
但是在运行时,这些分配都不会对内存中的列表对象产生任何影响。它仍然在那里,它仍然是一个ArrayList对象;它有一个类型为Whatever的成员。
换句话说:创建引用同一对象的多个变量/字段对引用的对象没有任何(直接)效果;无论是什么样的物体。
当多个变量/字段引用相同的对象时,唯一可能发生变化的可能是该对象有资格被垃圾收集的时间点。
答案 1 :(得分:2)
订单将保持不变,因为您始终处理对初始List的引用,该引用不会更改List实例中的任何内容。
如果将List添加到Set,则会有所不同。这将取决于您使用的Set,更改顺序。
答案 2 :(得分:1)
更改参考类型不会影响对象。