Java列表和集合订购查询

时间:2016-09-02 15:20:40

标签: java list collections

我知道java中的List保证维护订单,但Collection不是。

我的问题是,如果我有一个list1,并且我将该list1分配给一个集合,然后我将该集合转换为List list2,那么list2与list1的顺序是否相同?

或者它可以丢失订单,因为它在某个时候作为一个集合被包围了?

谢谢大家的帮助。

3 个答案:

答案 0 :(得分:4)

你混淆了两个概念:

  1. 变量,字段的编译时声明......
  2. 对象的运行时“标识”
  3. 换句话说;当然,编译器允许你写:

    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)

更改参考类型不会影响对象。