ฉันจะเริ่มต้น MutotList ของ Kotlin ให้ว่าง MutableList ได้อย่างไร


241

ดูเหมือนง่ายมาก แต่ฉันจะเตรียมข้อมูลเบื้องต้นของ Kotlin MutableListให้ว่างได้MutableListอย่างไร

ฉันสามารถแฮ็คด้วยวิธีนี้ได้ แต่ฉันมั่นใจว่ามีบางอย่างที่ใช้ได้ง่ายกว่า:

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

คำตอบ:


436

คุณสามารถเขียน:

val mutableList = mutableListOf<Kolory>()

นี่เป็นวิธีที่งี่เง่าที่สุด

ทางเลือกอื่นคือ

val mutableList : MutableList<Kolory> = arrayListOf()

หรือ

val mutableList : MutableList<Kolory> = ArrayList()

นี่คือการใช้ประโยชน์จากความจริงที่ว่าประเภทจาวาชอบArrayListจะดำเนินการโดยปริยายประเภทMutableListผ่านเคล็ดลับคอมไพเลอร์


คุณต้องการนำเข้าอะไร เมื่อฉันเขียนสิ่งนี้ในโครงการปัจจุบันของฉันฉันจะได้รับ arrayListOf อ้างอิงที่ไม่ได้รับการแก้ไขและเหมือนกันถ้าฉันลอง mutableListOf
vextorspace

คุณมี stdlib ใน classpath ของคุณหรือไม่?
Kirill Rakhman

ฉันต้องเปลี่ยนธง kotlin_version ใน build.gradle ของฉันกลับไปที่ 1.1.0 แทนที่จะเป็น 1.1.1
vextorspace

1
@androiddeveloper นั่นเป็นเพราะkotlin.collections.Listเป็นไม่ได้ java.utils.ListKotlin มีกลไกสำหรับการจับคู่ชนิดจาวาในตัว โปรดดูkotlinlang.org/docs/reference/java-interop.html#mapped-typesและคำถาม SO ที่คล้ายกัน ส่วนความคิดเห็นไม่เหมาะสมสำหรับการพูดคุยในรายละเอียด
คิริลล์ Rakhman

1
@Mohanakrrishna ใช่ฟังก์ชั่นรองรับการส่งผ่านข้อโต้แย้ง
คิริลล์ Rakhman

17

รูปแบบต่าง ๆ ขึ้นอยู่กับประเภทของรายการสำหรับรายการอาร์เรย์:

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

สำหรับ LinkedList:

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

สำหรับประเภทรายการอื่น ๆ จะถือว่าไม่แน่นอนหากคุณสร้างโดยตรง:

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

สิ่งนี้ถือเป็นจริงสำหรับทุกสิ่งที่ใช้Listอินเทอร์เฟซ (เช่นคอลเลกชันไลบรารีอื่น ๆ )

ไม่จำเป็นต้องทำซ้ำประเภททางด้านซ้ายหากรายการนั้นไม่แน่นอน หรือเฉพาะในกรณีที่คุณต้องการถือว่าเป็นแบบอ่านอย่างเดียวเช่น:

val myList: List<Kolory> = ArrayList()

ถ้าฉันรู้ขนาดของ MutableList ใหม่ สำหรับ ArrayList ฉันทำได้: ArrayList(24)ตัวอย่างเช่นถ้าฉันคิดว่า 24 เป็นการเริ่มต้นที่ดีสำหรับมันมันอาจจะไม่ต้องการมากกว่านั้น
นักพัฒนา android

@androiddeveloper ดูเอกสารสำหรับ list constructors หรือ Java API สำหรับรายการที่อยู่ข้างใต้แล้วคุณจะเห็นตัวเลือกสำหรับสิ่งที่คุณต้องการ
Jayson Minard

mutableListOfคุณลืมเกี่ยวกับ ถูกต้องจะเป็น:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
924

10

ฉันชอบด้านล่างเพื่อ:

var book: MutableList<Books> = mutableListOf()

/ ** ส่งคืน [MutableList] ใหม่พร้อมองค์ประกอบที่กำหนด * /

public fun <T> mutableListOf(vararg elements: T): MutableList<T>
    = if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.