我知道 Java 中的 List 保证保持顺序,但 Collection 则不然。
我的问题是,如果我有一个 list1,并将该 list1 分配给一个集合,然后将该集合转换为一个列表 list2,那么 list2 的顺序是否与 list1 相同?
或者它会丢失顺序,因为它在某个时候被当作集合处理了吗?
谢谢大家的帮助。
最佳答案
你混淆了两个概念:
- 变量、字段、...的编译时声明
- 对象的运行时“身份”
换句话说;当然,编译器允许你这样写:
List<Whatever> stuff = new ArrayList<>();
stuff.add(whatever);
Collection<Whatever> stuffInCollection = stuff;
Object loosingAllTypeInformation = stuffInCollection;
List<Whatever> castingBack = (List<Whatever>) loosingAllTypeInformation;
但是在运行时,这些赋值都不会对内存中的列表对象产生任何影响。它仍然坐在那里,它仍然是一个 ArrayList 对象;它有一个 Whatever 类型的成员。
换句话说:创建引用同一对象的多个变量/字段不会对引用的对象产生任何(直接)影响;不管那是什么物体。
当有多个变量/字段引用同一个对象时,唯一可能改变的可能是该对象有资格被垃圾收集的时间点。
关于Java List和Collection排序查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39295841/