Làm thế nào để khởi tạo Danh sách <T> trong Kotlin?


81

Tôi thấy Kotlin có một List<out E>bộ sưu tập và tôi đã tự hỏi về các cách khác nhau để khởi tạo một bộ sưu tập. Trong Java, tôi có thể viết:

List<String> geeks = Arrays.asList("Fowler", "Beck", "Evans");

Làm thế nào tôi có thể đạt được điều tương tự trong Kotlin?


10
Với listOf?
Michael

Câu trả lời:


130

listOf chức năng cấp cao nhất để giải cứu:

val geeks = listOf("Fowler", "Beck", "Evans")

11
Gọi listOf mà không có bất kỳ tham số nào sẽ cho bạn một danh sách trống hoặc chỉ cần gọi voidList để làm cho nó dễ đọc hơn.
ếchcoder

4
Ngoài ra còn có arrayListOf
Greg T

Nó có thể thay đổi để sửa đổi sau này không?
IgorGanapolsky

1
@IgorGanapolsky Kiểu trả về là kiểu chỉ đọc List<T>, vì vậy người ta không nên cho rằng nó có thể thay đổi được.
Ilya

15

Cả hai câu trả lời được ủng hộ bởi Ilyagmariotti đều tốt và chính xác. Tuy nhiên, một số lựa chọn thay thế được lan truyền trong các bình luận, và một số không được đề cập đến.

Câu trả lời này bao gồm một bản tóm tắt về những câu đã được đưa ra, cùng với những giải thích rõ ràng và một vài lựa chọn thay thế khác.

Danh sách bất biến ( List)

Danh sách bất biến, hoặc danh sách chỉ đọc, là danh sách không thể thêm hoặc bớt phần tử.

  • Như Ilya đã chỉ ra, hãy listOf()thường xuyên làm những gì bạn muốn. Điều này tạo ra một danh sách bất biến, tương tự như Arrays.asListtrong Java.
  • Như ếchcoder nói trong một nhận xét, emptyList()cũng làm như vậy, nhưng tự nhiên trả về một danh sách trống.
  • listOfNotNull()trả về một danh sách bất biến loại trừ tất cả các nullphần tử.

Danh sách có thể thay đổi ( MutableList)

Danh sách có thể thay đổi có thể có thêm hoặc bớt các phần tử.

  • gmariotti đề xuất sử dụng mutableListOf(), thường là những gì bạn muốn khi cần thêm hoặc xóa các phần tử khỏi danh sách.
  • Greg T đưa ra phương án thay thế , arrayListOf(). Điều này tạo ra một có thể thay đổi ArrayList. Trong trường hợp bạn thực sự muốn ArrayListtriển khai, hãy sử dụng nó mutableListOf().
  • Đối với các Listtriển khai khác , không có bất kỳ chức năng tiện lợi nào, chúng có thể được khởi tạo chẳng hạn val list = LinkedList<String>(). Đó chỉ đơn giản là tạo đối tượng bằng cách gọi hàm tạo của nó. Chỉ sử dụng điều này nếu bạn thực sự muốn, chẳng hạn như LinkedListviệc triển khai.

13

Chỉ để bổ sung thêm thông tin, Kotlin cung cấp cả bất biến ListMutableListcó thể được khởi tạo bằng listOfmutableListOf. Nếu bạn quan tâm hơn đến những gì Kotlin cung cấp liên quan đến Bộ sưu tập, bạn có thể truy cập tài liệu tham khảo chính thức tại Bộ sưu tập .


7

Hãy để tôi giải thích một số trường hợp sử dụng: hãy tạo một danh sách bất biến (không thể thay đổi) với các mục khởi tạo:

val myList = listOf("one" , "two" , "three")

hãy tạo một danh sách Có thể thay đổi (có thể thay đổi) với các trường khởi tạo:

val myList = mutableListOf("one" , "two" , "three")

Hãy khai báo một không thể thay đổi (không thể thay đổi) và sau đó khởi tạo nó:

lateinit var myList : List<String>
// and then in the code :
myList = listOf("one" , "two" , "three")

Và cuối cùng thêm một số mục bổ sung vào mỗi:

val myList = listOf("one" , "two" , "three")
myList.add() //Unresolved reference : add, no add method here as it is non mutable 

val myMutableList = mutableListOf("one" , "two" , "three")
myMutableList.add("four") // it's ok 

1

Bằng cách này, bạn có thể khởi tạo Danh sách trong Kotlin

val alphabates : List<String> = listOf("a", "b", "c")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.