2016-09-02 95 views
1

我知道java中的List是保證維護訂單,但Collection不是。Java列表和收集訂購查詢

我的問題是,如果我有一個列表1,我是列表1分配給一個集合,然後我投的是收集到一個List列表2,將列表2具有相同的順序列表1?

或者,它可能會失去訂單,因爲它是在habdled爲收集一些呢?

謝謝大家的幫助。

+5

來回施放引用不會與底層對象交互。 –

+0

你爲什麼不試試看? :) –

+0

'List' *是*集合'。將List引用賦給一個超類型變量不會改變* object *本身,只是*編譯器*所看到的類型。 – Andreas

回答

2

順序將是不變的,因爲你總是處理,以不更改List實例任何初始列表的引用。

如果您的列表添加到其設置是不同的。這將取決於您使用的Set,更改順序。

1

更改引用類型不影響對象。

4

你是兩個概念混淆:

  1. 一個變量,字段的編譯時聲明,...
  2. 對象的運行時「身份」

換句話說;當然,編譯器讓你寫:

List<Whatever> stuff = new ArrayList<>(); 
stuff.add(whatever); 

Collection<Whatever> stuffInCollection = stuff; 
Object loosingAllTypeInformation = stuffInCollection; 
List<Whatever> castingBack = (List<Whatever>) loosingAllTypeInformation; 

但在運行時,所有這些任務都在內存中列表對象任何影響。它仍然在那裏,它仍然是一個ArrayList對象;它有一個Whatever類型的成員。換句話說:創建多個引用同一對象的變量/字段沒有任何(直接)對引用對象的影響;不管是什麼樣的對象。

有多個變量時可能會更改的唯一/場時引用該對象有資格被垃圾收集同一個對象可能的時間點。

+0

你不需要施放。實際上,你*不應該轉換,因爲它繞過了編譯器類型檢查。 – Andreas

+0

我更新了答案;給出該演員的「有效」用法(因爲他的問題實際上是提及劇組演員)。 – GhostCat