Làm cách nào để tôi khởi tạo MutableList của Kotlin thành MutableList trống?


241

Có vẻ rất đơn giản, nhưng, làm thế nào để tôi khởi tạo Kotlin MutableListđể trống MutableList?

Tôi có thể hack nó theo cách này, nhưng tôi chắc chắn có một thứ dễ dàng hơn:

var pusta: List<Kolory> = emptyList()
var cos: MutableList<Kolory> = pusta.toArrayList()

Câu trả lời:


436

Bạn chỉ có thể viết:

val mutableList = mutableListOf<Kolory>()

Đây là cách thành ngữ nhất.

Cách khác là

val mutableList : MutableList<Kolory> = arrayListOf()

hoặc là

val mutableList : MutableList<Kolory> = ArrayList()

Điều này đang khai thác thực tế là các loại java như ArrayListđang ngầm thực hiện loại MutableListthông qua một thủ thuật biên dịch.


Bạn có cần nhập gì không? Khi tôi viết điều này trong dự án hiện tại của tôi, tôi nhận được mảng tham chiếu chưa được giải quyết và tương tự nếu tôi thử mutableListOf
vextorspace

Bạn có stdlib trong classpath của bạn?
Kirill Rakhman

Tôi vừa phải chuyển cờ kotlin_version trong bản dựng của mình. Nâng cấp trở lại 1.1.0 thay vì 1.1.1
gian vextors

1
@androiddeveloper rằng vì kotlin.collections.Listkhông java.utils.List . Kotlin có một cơ chế để ánh xạ một số loại java tích hợp. Vui lòng tham khảo kotlinlang.org/docs/reference/java-interop.html#mapped-types và các câu hỏi SO tương tự. Phần bình luận không thích hợp để thảo luận chi tiết về vấn đề này.
Kirill Rakhman

1
@Mohanakrrishna vâng, các hàm hỗ trợ truyền đối số.
Kirill Rakhman

17

Các hình thức khác nhau tùy thuộc vào loại Danh sách, cho Danh sách Mảng:

val myList = mutableListOf<Kolory>() 
// or more specifically use the helper for a specific list type
val myList = arrayListOf<Kolory>()

Đối với LinkedList:

val myList = linkedListOf<Kolory>()
// same as
val myList: MutableList<Kolory> = linkedListOf()

Đối với các loại danh sách khác, sẽ được giả sử Mutable nếu bạn xây dựng chúng trực tiếp:

val myList = ArrayList<Kolory>()
// or
val myList = LinkedList<Kolory>()

Điều này đúng cho bất cứ điều gì thực hiện Listgiao diện (tức là các thư viện bộ sưu tập khác).

Không cần lặp lại kiểu ở phía bên trái nếu danh sách đã có Mutable. Hoặc chỉ khi bạn muốn coi chúng là chỉ đọc, ví dụ:

val myList: List<Kolory> = ArrayList()

Nếu tôi biết kích thước của MutableList mới thì sao? Đối với ArrayList, tôi có thể làm: ArrayList(24)ví dụ: nếu tôi nghĩ rằng 24 là một khởi đầu tốt cho nó, thì có lẽ nó sẽ không cần nhiều hơn nó.
nhà phát triển Android

@androiddeveloper Xem tài liệu cho các nhà xây dựng danh sách hoặc API Java cho các danh sách cơ bản và bạn sẽ thấy các tùy chọn cho những gì bạn muốn.
Jayson Minard

bạn quên mất mutableListOf. Chính xác sẽ là:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
user924

10

Tôi thích dưới đây để:

var book: MutableList<Books> = mutableListOf()

/ ** Trả về [MutableList] mới với các phần tử đã cho. * /

public fun <T> mutableListOf(vararg elements: T): MutableList<T>
    = if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))
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.