一、相互轉換的方法
? ? ? ? 1. 數組轉List ,使用JDK中java.util.Arrays工具類的asList方法。
? ? ? ? 2. List轉數組,使用List的toArray方法。無參toArray方法返回 Object數組,傳入初始化長度的數組對象,返回該對象數組。
二、分析修改內容的影響
1.Arrays.asList轉List
????????我們debug看源碼,可以發現asList方法里面有一個ArrayList,但是這個只是一個內部類,可以看見源碼ArrayList(E[] array) { a = Objects.requireNonNull(array); }這一行,意思就是判斷array是不是空,是空就報錯,不是空,就把array賦值給a,a又是上面定義的一個數組。所以,我們可以知道,這里只涉及對象的引用,而沒有對象的創建,a和aary還是指向同一個地址。
2.List用toArray轉數組
? ? ? ? 很明顯進行了數據的拷貝,也就是創建一個新對象。
三、面試題
1. 用Arrays.asList轉List后,如果修改了數組內容,list受影響嗎?
????????Arrays.asList轉換list之后,如果修改了數組的內容,list會受影響,因為它的底層使用的Arrays類中的一個內部類ArrayList來構造的集合,在這個集合的構造器中,把我們傳入的這個集合進行了包裝而已,最終指向的都是同一個內存地址。
2. List用toArray轉數組后,如果修改了List內容,數組受影響嗎?
????????list用了toArray轉數組后,如果修改了list內容,數組不會影響,當調用了toArray以后,在底層是它是進行了數組的拷貝,跟原來的元素就沒啥關系了,所以即使list修改了以后,數組也不受影響。