นี่สำหรับคอลเลกชันที่ได้รับคำสั่งเช่น java.util.List ทำไมนักออกแบบภาษาจึงไม่มีวิธีสุดท้าย เหตุผลเดียวที่ฉันนึกได้คือ:
- ความกำกวมเมื่อการรวบรวมว่างเปล่า (ส่งคืนโมฆะหรือโยนข้อยกเว้น)
- API bloat
มีเหตุผลอื่นอีกไหม?
นี่สำหรับคอลเลกชันที่ได้รับคำสั่งเช่น java.util.List ทำไมนักออกแบบภาษาจึงไม่มีวิธีสุดท้าย เหตุผลเดียวที่ฉันนึกได้คือ:
มีเหตุผลอื่นอีกไหม?
คำตอบ:
API bloat น่าจะเป็นคำตอบ จากประสบการณ์ของฉันเพียงครั้งเดียวที่ฉันต้องการฟังก์ชั่นนี้ Queue หรือ Stack เป็นโครงสร้างข้อมูลที่ถูกต้องสำหรับงานที่มีวิธีการที่เหมาะสม
get(-1)
การดึงจากส่วนท้ายของรายการมันจะทำในสิ่งที่ OP ต้องการโดยไม่ต้องเพิ่ม API bloat คำตอบของฉันเช่นนี้ได้วาด downvotes ไม่ได้อธิบาย
last()
วิธีเป็นเพียงเป็นเรื่องง่ายเหมือนlist.get(list.size()-1)
เช่นเดียวกับไม่มีfirst()
วิธีการหรือfifth()
วิธีการ มันไม่ยากที่จะสังเคราะห์และเป็นความเชี่ยวชาญ นอกจากนี้คุณยังสามารถreverse()
รายการและlist.get(0)
ที่จะให้last
รายการ สิ่งที่ง่ายต่อการทำมักจะไม่ได้รับวิธีการเฉพาะของตนเอง
import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
final List<String> l = new ArrayList<String>();
l.add("A");
l.add("B");
l.add("Z");
System.out.println("l.get(0) = " + l.get(0));
System.out.println("l.get(l.size()-1) = " + l.get(l.size() - 1));
}
}
ผลลัพธ์ในผลลัพธ์ต่อไปนี้
l.get(0) = A
l.get(l.size()-1) = Z
มันก็ถือว่าเป็นการสันนิษฐานว่าทุกอย่างที่ใช้List
อินเทอร์เฟซมีแนวคิดของlast()
อะไร
.size()
จะส่งคืนขนาดปัจจุบัน.size()-1
จะยังคงเป็นองค์ประกอบสุดท้ายโดยไม่คำนึงว่าจะทราบได้อย่างไรว่ามีประชากรเต็มหรือไม่
.size()-1
ไม่ใช่วิธีที่สมบูรณ์แบบในการนำไปใช้last()
(แม้ว่ารายการขนาดใหญ่เช่นนี้จะไม่ค่อยน่าสนใจ จะใช้toArray()
... )
การjava.util.LinkedList
กำหนดgetLast()
และgetFirst()
วิธีการ น่าเสียดายที่วิธีการเหล่านี้ไม่ได้กำหนดไว้ในอินเทอร์เฟซตัวใดตัวหนึ่งดังนั้นคุณต้องใช้ชนิด LinkedList หากคุณสนใจเฉพาะองค์ประกอบสุดท้ายคุณอาจพิจารณาใช้วิธีการjava.util.Queue
ของส่วนต่อประสาน peek()
LinkedList ใช้คิว
โดยทั่วไปคุณต้องขอsize()
a for
-loop หรือวนซ้ำโดยขอ iterator และใช้มันในขณะที่หรือ do-loop ใช้อันที่เหมาะสมกับจุดประสงค์ของคุณ
ตัววนซ้ำรู้ ณ จุดที่กำหนดหากมีรายการมากขึ้นและอนุญาตให้คุณรับสิ่งต่อไปถ้ามี คุณทำซ้ำจนกระทั่ง "มีรายการเพิ่มเติมหรือไม่" ล้มเหลว
ดูหัวข้อ "Traversing Collections" ที่http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html
collection.get(collection.size() - 1)
สำหรับจำนวนของครั้งที่ผมเคยเขียน