ArrayList ใช้คลาสใด

ฉันแค่อยากจะชี้แจงคำถามนี้ที่ฉันมีมาระยะหนึ่งแล้วเพื่อให้โค้ดมีประสิทธิภาพและ 'ถูกต้อง' มากขึ้น

ฉันให้คลาส 'นักเรียน' พร้อมวัตถุในรายการอาร์เรย์ของวัตถุ ฉันมีคลาสอื่นที่เรียกว่า Class ซึ่งมีรายการอาร์เรย์ของการอ้างอิงถึงวัตถุเดียวกันในคลาส Student

ฉันควรประกาศคลาส 'Class' เป็น

ArrayList<Student> myStudents = new ArrayList<Student>();

or

ArrayList<Class> myStudents = new ArrayList<Class>();

อีกส่วนหนึ่งของคำถามคือฉันเคยเห็นผู้คนประกาศ arrayLists เป็น ArrayList<Student> myStudents = new ArrayList<>(); โดยที่แครอทครึ่งหลังจะว่างเปล่า ความแตกต่างหมายถึงอะไรกันแน่? นี่หมายความว่ารายการอาร์เรย์ไม่ใช่วัตถุของคลาสใด ๆ ใช่หรือไม่

ขอบคุณมากที่สละเวลาและช่วยเหลือไชโย


person eArshdeep    schedule 12.11.2016    source แหล่งที่มา
comment
แครอทเหรอ???????? xaxaxa มหากาพย์!.คุณหมายถึงผู้ดำเนินการเพชร ดูที่: stackoverflow.com/questions/4166966/   -  person GOXR3PLUS    schedule 12.11.2016
comment
ฉันจำได้ว่าเคยดูวิดีโอเมื่อนานมาแล้ว และมีคนเรียกวิดีโอนี้ว่าแครอท และเสริมว่ามันมีข้อขัดแย้งหรืออะไรบางอย่าง ฉันไม่สนใจที่จะค้นหาคำที่ถูกต้องในตอนนี้เพราะฉันยุ่งอยู่กับสิ่งนี้ ยังไงก็ตาม ฉันเข้าใจนะไอ้โง่ที่ทำให้ฉันดู :}   -  person eArshdeep    schedule 12.11.2016
comment
ฉันไม่ได้หมายความอย่างนั้น มันตลกมาก :)   -  person GOXR3PLUS    schedule 12.11.2016
comment
ดังนั้นใน List‹String› list = new LinkedList‹›(); LinkedList คืออะไร? คุณมีอะไรแบบนั้นได้ยังไง?   -  person eArshdeep    schedule 12.11.2016
comment
และใน ArrayList‹Class› myStudents = new ArrayList‹Class›(); นี่เป็นวัตถุของคลาส ArrayList หรือคลาส 'Class'   -  person eArshdeep    schedule 12.11.2016


คำตอบ (2)


ขึ้นอยู่กับสิ่งที่คุณต้องการจัดเก็บในรายการมากกว่าที่คุณจะใช้งาน หากคุณกำลังจัดเก็บวัตถุของนักเรียน คุณจะใช้ ArrayList<Student>()

ประเภทที่ละเว้นทางด้านขวาเรียกว่าการอนุมานประเภท (เพิ่มใน java 7) ซึ่งหมายความว่าพารามิเตอร์ประเภททางด้านขวาจะถูกอนุมานจากประเภทของตัวแปรการกำหนดทางด้านซ้าย ช่วยเขียนโค้ดให้สะอาดยิ่งขึ้น สำหรับเช่น

การเขียนด้านล่างนี้ง่ายกว่า:

List<Some<Type<Another>>> var = new ArrayList<>();

กว่า:

List<Some<Type<Another>>> var = new ArrayList<Some<Type<Another>>>();
person Gurwinder Singh    schedule 12.11.2016

ในทางเทคนิคแล้ว ไม่ใช่ทั้งสอง

คุณต้องการทำ:

List<Student> myStudents = new ArrayList<>();

หากคุณต้องการสร้าง ArrayList ด้วยวัตถุ Student และ

List<Class> myClasses = new ArrayList<>();

หากคุณต้องการสร้าง ArrayList ด้วยวัตถุ Class

1) สังเกตชื่อตัวแปร

2) โปรดทราบว่าคุณควรพยายามเขียนโค้ดไปยังอินเทอร์เฟซเสมอ (ด้านซ้ายคือ List ไม่ใช่ ArrayList) ซึ่งช่วยให้มีความยืดหยุ่นมากขึ้น เนื่องจากคุณไม่ต้องพึ่งพาการใช้งาน ArrayList เฉพาะในภายหลัง จุดนี้มาแรงมาก! คุณสามารถเขียนลายเซ็นวิธีการเพื่อยอมรับวัตถุประเภท List จากนั้นใช้ ArrayList, LinkedList หรือ Stack หรือคลาสใดๆ ที่ใช้ List ขึ้นอยู่กับว่าคุณใช้ ArrayList ในภายหลังอย่างไร อินเทอร์เฟซ Collection อาจเพียงพอแทน

ตัวดำเนินการเพชรอนุญาตให้คอมไพเลอร์อนุมานค่าของอาร์กิวเมนต์ประเภทโดยไม่ต้องพิมพ์ทั้งหมด จำเป็นสำหรับความเข้ากันได้แบบย้อนหลังสำหรับ Java เวอร์ชันเก่า

ตามหลักปฏิบัติทั่วไปสำหรับการเพิ่มประสิทธิภาพการทำงาน คุณจะต้องจัดหาความจุเริ่มต้นเป็น ArrayList หากเป็นไปได้ ดังนั้น ถ้าคุณรู้ว่ามีเพียง 5 คลาส คุณจะทำดังนี้

List<Class> myClasses = new ArrayList<>(5);
person vphilipnyc    schedule 12.11.2016