ซีเควนซ์เทียบกับคอลเลกชัน
แต่ละแบบเหมาะกับสถานการณ์ใด
ซีเควนซ์เทียบกับคอลเลกชัน เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
ซีเควนซ์กับคอลเลกชัน
ทั้งซีเควนซ์และคอลเลกชันมีการดำเนินการเชิงฟังก์ชันแบบเดียวกัน แต่ประเมินผลต่างกัน การรู้ว่าแบบใดเหมาะกว่าในแต่ละกรณีจะช่วยให้คุณเขียนโค้ดที่มีประสิทธิภาพและอ่านง่าย
ทบทวนคอลเลกชันแบบประเมินผลทันที
คอลเลกชันเป็นแบบ ประเมินผลทันที: การดำเนินการทุกอย่างจะประมวลผลองค์ประกอบทั้งหมดและสร้างคอลเลกชันใหม่ทันที วิธีนี้เรียบง่ายและรวดเร็วสำหรับข้อมูลขนาดเล็ก
fun main() {
val result = listOf(1, 2, 3).map { it + 1 }.filter { it > 2 }
println(result)
}ทบทวนซีเควนซ์แบบประเมินผลเมื่อจำเป็น
ซีเควนซ์เป็นแบบ ประเมินผลเมื่อจำเป็น: การดำเนินการจะสร้างสายการประมวลผลที่ทำงานทีละองค์ประกอบเมื่อมีการดึงข้อมูลไปใช้เท่านั้น จึงไม่ต้องสร้างคอลเลกชันระหว่างทาง
fun main() {
val result = listOf(1, 2, 3).asSequence().map { it + 1 }.filter { it > 2 }.toList()
println(result)
}เมื่อคอลเลกชันเหมาะกว่า
สำหรับคอลเลกชันขนาดเล็กและสายการดำเนินการสั้น ๆ คอลเลกชันมักทำงานเร็วกว่าและเข้าใจง่ายกว่า ซีเควนซ์มีค่าใช้จ่ายเพิ่มเติมต่อองค์ประกอบจากการเรียกตัววนซ้ำ ซึ่งอาจมากกว่าประโยชน์ที่ได้รับเมื่อข้อมูลมีขนาดเล็กมาก
เมื่อซีเควนซ์เหมาะกว่า
ซีเควนซ์เหมาะกว่าเมื่อข้อมูลมีขนาดใหญ่ สายการดำเนินการยาว หรือคุณต้องการผลลัพธ์เพียงบางส่วน เช่น ผลลัพธ์แรกหรือ N รายการแรก ซีเควนซ์จะไม่สร้างลิสต์ระหว่างทางขนาดใหญ่และจะหยุดได้ก่อน
fun main() {
val firstEvenSquare = (1..1000000).asSequence()
.map { it * it }
.first { it % 2 == 0 }
println(firstEvenSquare)
}การวัดความแตกต่าง
ตัวอย่างนี้ใช้ช่วงข้อมูลขนาดใหญ่เพื่อแสดงให้เห็นว่าซีเควนซ์หลีกเลี่ยงการสร้างลิสต์ระหว่างทางที่มีองค์ประกอบหนึ่งล้านรายการ ซึ่งแบบประเมินผลทันทีจะสร้างขึ้น
fun main() {
val seqResult = (1..1000).asSequence()
.filter { it % 2 == 0 }
.map { it * 3 }
.take(3)
.toList()
println(seqResult)
}การใช้หน่วยความจำ
สายการดำเนินการแบบประเมินผลทันทีจะเก็บลิสต์ระหว่างทางทุกชุดไว้ในหน่วยความจำพร้อมกัน ส่วนซีเควนซ์จะเก็บไว้เพียงองค์ประกอบปัจจุบันที่กำลังไหลผ่าน ดังนั้นการใช้หน่วยความจำสูงสุดจึงยังอยู่ในระดับต่ำแม้สายการประมวลผลจะยาว
ข้อได้เปรียบจากการหยุดก่อนครบ
หากการดำเนินการปลายทางสามารถทำงานเสร็จก่อนกำหนดได้ เช่น first, find หรือ any ซีเควนซ์จะข้ามองค์ประกอบที่เหลือ ขณะที่คอลเลกชันแบบประเมินผลทันทีจะประมวลผลทุกอย่างไปแล้ว
fun main() {
val found = (1..100).asSequence()
.map { println("checking $it"); it }
.any { it == 3 }
println("Found: $found")
}ระวังการดำเนินการที่มีสถานะ
การดำเนินการอย่าง sorted, distinct และ groupBy ต้องใช้องค์ประกอบทั้งหมด จึงลดการประเมินผลเมื่อจำเป็น สายการประมวลผลที่ประกอบด้วยการดำเนินการเหล่านี้เป็นส่วนใหญ่อาจไม่ได้ประโยชน์จากการใช้ซีเควนซ์
แนวทางปฏิบัติ
หลักทั่วไปคือ ให้เลือกคอลเลกชันเป็นค่าเริ่มต้นเพื่อความเข้าใจง่าย เปลี่ยนมาใช้ซีเควนซ์เมื่อประมวลผลข้อมูลขนาดใหญ่ เชื่อมการดำเนินการหลายขั้นตอน หรือใช้ผลลัพธ์เพียงบางส่วน หากประสิทธิภาพมีความสำคัญ โปรดวัดผลเสมอ
ส่วนติดต่อเดียวกัน กลไกต่างกัน
เนื่องจากทั้งสองแบบใช้ชื่อการดำเนินการเดียวกัน คุณจึงมักสลับไปมาได้โดยเพิ่มหรือลบ asSequence() และการดำเนินการปลายทาง toList() วิธีนี้ทำให้การทดลองวัดประสิทธิภาพมีความเสี่ยงต่ำ
fun main() {
val data = listOf(1, 2, 3, 4, 5)
val asList = data.map { it * 2 }.filter { it > 4 }
val asSeq = data.asSequence().map { it * 2 }.filter { it > 4 }.toList()
println(asList == asSeq)
}ตรวจสอบอย่างรวดเร็ว
ในสถานการณ์ใดที่ซีเควนซ์มีแนวโน้มทำงานได้เร็วกว่าคอลเลกชันมากที่สุด
ทบทวน
คอลเลกชันประเมินผลทันทีและเหมาะที่สุดกับข้อมูลขนาดเล็กและการเน้นความเข้าใจง่าย ส่วนซีเควนซ์ประเมินผลเมื่อจำเป็นและเหมาะที่สุดกับข้อมูลขนาดใหญ่ สายการดำเนินการยาว หรือผลลัพธ์บางส่วน เนื่องจากไม่สร้างลิสต์ระหว่างทางและหยุดก่อนครบได้ โปรดระวังการดำเนินการที่มีสถานะ ทั้งสองแบบใช้ส่วนติดต่อเดียวกัน จึงสลับใช้งานได้ง่าย บทเรียนซีเควนซ์จบลงเพียงเท่านี้
เรียนรู้ Kotlin ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “ซีเควนซ์เทียบกับคอลเลกชัน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ซีเควนซ์เทียบกับคอลเลกชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ซีเควนซ์เทียบกับคอลเลกชัน”
แต่ละแบบเหมาะกับสถานการณ์ใด คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ซีเควนซ์เทียบกับคอลเลกชัน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงใช้ซีเควนซ์
- การสร้างซีเควนซ์
- การดำเนินการแบบขี้เกียจ
- ซีเควนซ์เทียบกับคอลเลกชัน