จะเพิ่มรายการไปยัง ArrayList ใน Kotlin ได้อย่างไร?


คำตอบ:


103

สำหรับคนที่เพิ่งย้ายจากjavaในโดยไม่เปลี่ยนรูปการเริ่มต้นและรุ่นไม่แน่นอนของรายการที่เรียกว่าKotlin ListMutableList

ดังนั้นหากคุณมีสิ่งที่ต้องการ:

val list: List<String> = ArrayList()

ในกรณีนี้คุณจะไม่ได้รับadd()วิธีการเนื่องจากรายการไม่เปลี่ยนรูป ดังนั้นคุณจะต้องประกาศMutableListตามที่แสดงด้านล่าง:

val list: MutableList<String> = ArrayList()

ตอนนี้คุณจะเห็นadd()วิธีการและคุณสามารถเพิ่มองค์ประกอบในรายการใดก็ได้


5
ขอขอบคุณ! ฉันกระแทกหัวของฉันกับวิธีการบวกนั้นใน Arrays ...
dasfima

1
ดีสิ่งที่ฉันกำลังมองหา ขอขอบคุณ.
Sam Chen

อะไรคือความแตกต่างระหว่างการใช้งานval list: MutableList<String> = ArrayList()และval list = mutableListOf<String>()?
Sam Chen

79

หากคุณมีคอลเล็กชันMUTABLE :

val list = mutableListOf(1, 2, 3)
list += 4

หากคุณมีคอลเล็กชันIMMUTABLE :

var list = listOf(1, 2, 3)
list += 4

โปรดทราบว่าฉันใช้valสำหรับรายการที่เปลี่ยนแปลงได้เพื่อเน้นว่าวัตถุนั้นเหมือนกันเสมอ แต่เนื้อหาจะเปลี่ยนไป

varในกรณีของรายการที่ไม่เปลี่ยนรูปที่คุณต้องทำให้มัน อ็อบเจ็กต์ใหม่ถูกสร้างขึ้นโดยตัว+=ดำเนินการพร้อมค่าเพิ่มเติม


7
การทำ+=ในรายการที่ไม่เปลี่ยนแปลงจำเป็นต้องคัดลอกองค์ประกอบทั้งหมดของรายการในรายการที่เปลี่ยนแปลงได้ใหม่จากนั้นกำหนดใหม่ให้กับรายการจริงของคุณ varผมไม่ทราบว่ามันเป็นที่เหมาะสมการประกาศรายชื่อของคุณเป็น อย่างไรก็ตามการประกาศรายชื่อตัวแปรไม่ใช่ความคิดที่ดีสำหรับฉัน
crgarridos

1
ถ้ารายการจะไม่เปลี่ยนรูปคุณไม่มีตัวเลือกอื่น ๆ varเช่นการประกาศเป็น หากรายการที่ไม่เปลี่ยนรูปถูกประกาศว่าเป็นvalรายการที่ไม่สามารถเปลี่ยนแปลงได้เลย เพียงแค่กำหนดใหม่ให้กับตัวแปรอื่นก็เป็นไปได้
guenhter

1
แน่นอนฉันไม่ต้องการอนุญาตให้เปลี่ยนการอ้างอิงของตัวแปรของฉัน อาจมีผลข้างเคียงในงานภายนอก / พร้อมกัน ดีกว่าในการสร้างสำเนาเพื่อแยกตรรกะ แต่นี่อยู่นอกเหนือขอบเขตของคำถาม
crgarridos

24

หากคุณต้องการใช้ java ArrayList โดยเฉพาะคุณสามารถทำสิ่งนี้ได้:

fun initList(){
    val list: ArrayList<String> = ArrayList()
    list.add("text")
    println(list)
}

ไม่เช่นนั้นคำตอบของ @guenhter คือสิ่งที่คุณกำลังมองหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.