อะไรคือความแตกต่างระหว่างคอลเลกชันที่เรียงลำดับและการจัดเรียง?


132

มีความแตกต่างระหว่างคอลเลกชันที่เรียงลำดับและคอลเลกชันที่สั่งซื้อหรือไม่?


1
อย่าใช้คำตอบที่นี่ตามตัวอักษรเกินไป แม้ว่าจะเป็นคำจำกัดความที่เข้าใจและยอมรับกันอย่างแพร่หลาย แต่ก็ไม่ใช่คำจำกัดความโดยพฤตินัยในศัพท์คอมพิวเตอร์ เช่นใน. NET จะเรียกว่าอินเทอร์เฟซสำหรับ "เรียงลำดับ" IOrderedEnumerable (สิ่งที่น่าตลกคือมันไม่ค่อยสอดคล้องกันใน. NET พจนานุกรมที่เกี่ยวข้องกับ "ลำดับการแทรก" ใน. NET OrderedDictionaryซึ่งบางคนเชื่อว่าเป็นการเรียกชื่อผิดเมื่อเทียบกับคำพูดIndexedDictionary) . ใช่ในโลก java (ส่วนใหญ่อยู่ที่อื่นด้วย) พวกเขาหมายถึงสิ่งที่คุณมีในคำตอบ สำหรับข้อมูลเพิ่มเติมโปรดดูที่นี่
nawfal

หากอินสแตนซ์การนำไปใช้งานบางส่วนตั้งชื่อผิดก็ไม่มีเหตุผลที่จะเผยแพร่ข้อผิดพลาด เป็นคำถามที่ดีพร้อมคำตอบที่ดี ใช้การตั้งชื่อที่เหมาะสม - ช่วยลดความสับสนสำหรับทุกคนรวมถึงตัวคุณเอง
foo

คำตอบ:


168

สั่งซื้อคอลเลกชันหมายความว่าองค์ประกอบของคอลเลกชันที่มีคำสั่งที่เฉพาะเจาะจง คำสั่งไม่ขึ้นอยู่กับค่า รายการเป็นตัวอย่าง

เรียงคอลเลกชันหมายความว่าไม่เพียง แต่คอลเลกชันมีคำสั่ง แต่คำสั่งที่ขึ้นอยู่กับค่าขององค์ประกอบ SortedSetเป็นตัวอย่าง

ในทางตรงกันข้ามคอลเลกชันที่ไม่มีคำสั่งใด ๆสามารถรักษาองค์ประกอบตามลำดับใด ๆ ชุดเป็นตัวอย่าง


1
ลำดับความสำคัญเป็นคอลเลกชันที่สั่งซื้อหรือไม่
Overexchange

@overexchange จากคำจำกัดความข้างต้นคิวลำดับความสำคัญจะเป็นคอลเล็กชันที่เรียงลำดับในกรณีส่วนใหญ่เนื่องจากลำดับความสำคัญมักจะถูกกำหนดให้เป็นคุณสมบัติขององค์ประกอบในคิว
cdeszaq

ถ้า SortedSet ได้รับมาจาก Set และมีความสัมพันธ์แบบ is-a ด้วยแล้วคุณจะพูดได้อย่างไรว่า Set นั้นไม่มีคำสั่งใด ๆ
xpioneer

79

คอลเลกชันที่เรียงลำดับจะรักษาลำดับขององค์ประกอบตามลำดับที่คุณใส่ / ลบออกจากคอลเลกชัน

คอลเลกชันที่เรียงลำดับจะช่วยให้องค์ประกอบถูกจัดเรียงตามเกณฑ์การเรียง


18

Java ใช้ "คอลเลกชันที่สั่งซื้อ" เพื่อหมายถึงคอลเล็กชันเช่น List โดยที่ (ไม่เหมือน HashSet) คอลเล็กชันจะจดจำลำดับขององค์ประกอบที่ควรจะอยู่ดังนั้นจึงสามารถเพิ่มองค์ประกอบลงในคอลเล็กชันได้ที่ "สถานที่" ที่เฉพาะเจาะจงตามลำดับ .

Java ใช้ "sorted collection" เพื่อหมายถึงคอลเล็กชันเช่น SortedSet โดยที่ (ไม่เหมือน List) ลำดับที่ตัววนซ้ำข้ามคอลเลกชันจะเป็นไปตามตัวเปรียบเทียบที่ระบุหรือลำดับตามธรรมชาติขององค์ประกอบ

ดังนั้นความแตกต่างก็คือการจัดลำดับขึ้นอยู่กับค่า ("เรียงลำดับ") หรือเป็นคุณสมบัติที่องค์ประกอบมีค่าโดยไม่ขึ้นกับค่า ("เรียงลำดับ")


1
คำตอบที่ดีและ +1 สำหรับการกล่าวถึง "Java" มันบอกความหมายได้รับการยอมรับในสถานที่ส่วนใหญ่เกินไปเช่นOrderedDictในหลาม แต่ใน .NET อินเตอร์เฟซสำหรับ "เรียง" IOrderedEnumerableนับเรียกว่า ดังนั้นมันขึ้นอยู่กับ บอกเพียงว่า ..
nawfal

9

ใช่แม้ว่าแนวคิดจะคล้ายกัน

List เป็นคอลเลกชันที่เรียงลำดับ: แต่ละองค์ประกอบมีดัชนีซึ่งสร้างลำดับขององค์ประกอบ แต่โดยปกติจะไม่เกี่ยวข้องกับคุณสมบัติขององค์ประกอบใด ๆ

SortedMapและSortedSetเป็นคอลเลกชันที่เรียงลำดับซึ่งหมายความว่าการวนซ้ำผ่านคอลเลกชันจะเกิดขึ้นตามลำดับที่ได้มาจากองค์ประกอบต่างๆ ตัวอย่างเช่นหากคุณมีSortedSet<String>สตริงจะถูกจัดเรียงตามลำดับการจัดเรียงศัพท์

สามารถจัดเรียงคอลเล็กชันที่สั่งซื้อได้ แต่ไม่จำเป็นต้องเป็น (เช่นหลังการใช้งานCollections.sort()) เมื่อลำดับภายนอกเหมือนกันกับลำดับการจัดเรียงขององค์ประกอบ คอลเล็กชันที่เรียงลำดับจะเรียงลำดับโดยปริยายเสมอ (กล่าวคือมักจะมีองค์ประกอบ "แรก" และจะเหมือนกันเสมอตราบใดที่คุณไม่ได้เพิ่มอีกอันที่เล็กกว่า)


5

คอลเลกชันที่เรียงลำดับคือคอลเล็กชันที่ติดตามดัชนีที่ต่อเนื่องกันซึ่งทุกองค์ประกอบจะถูกแทรกเข้าไป

คอลเลกชันที่เรียงลำดับคือคอลเลกชันที่เรียงลำดับเมื่อลำดับขึ้นอยู่กับค่าขององค์ประกอบที่จะแทรกตลอดการใช้อินเทอร์เฟซเปรียบเทียบซึ่งให้วิธีการกำหนดเกณฑ์การเรียงลำดับแก่คุณ

ฉันหวังว่ามันจะช่วยได้


2

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

ดังนั้นรายการสตริงที่เรียงลำดับจะถูกจัดเรียงตามเมธอด String.compareTo รายการอาจมีรายการสตริงที่แทรกตามลำดับที่กำหนด แต่คำสั่งนั้นจะยังคงเหมือนเดิม

แน่นอนว่ามีวิธีการในคลาส Collections ในการเรียงลำดับรายการ


1

คอลเลกชันที่จัดเรียงมักจะหมายถึงองค์ประกอบที่เรียงลำดับจากค่า minimun เป็นค่าสูงสุดหรือในทางกลับกันขึ้นอยู่กับแอตทริบิวต์ขององค์ประกอบที่อัลกอริทึมทำงาน

สำหรับคอลเลกชัน interger การจัดเรียงอาจเป็นจากจำนวนขั้นต่ำไปจนถึงจำนวนสูงสุดสำหรับการรวบรวมบุคคลอาจมีการเรียงลำดับตามความสูงของบุคคลหรือน้ำหนักของบุคคลเป็นต้น

เมื่อพูดถึง order มักจะหมายถึงลำดับของการแทรก ลำดับอาจมีการเปลี่ยนแปลงหลังจากการเรียงลำดับ


0

คอลเลกชันที่เรียงลำดับกับคอลเล็กชันที่สั่งซื้อ

1. คอลเลกชันที่เรียงลำดับ

คอลเลกชันที่เรียงลำดับกำลังจัดเรียงคอลเล็กชันโดยใช้คุณสมบัติการเรียงลำดับที่จัดเตรียมโดยเฟรมเวิร์กคอลเลกชัน Java การเรียงลำดับเกิดขึ้นในหน่วยความจำของ JVM ซึ่งเรียกใช้ Hibernate หลังจากข้อมูลถูกอ่านจากฐานข้อมูลโดยใช้ตัวเปรียบเทียบจาวา

หากคอลเล็กชันของคุณมีขนาดไม่ใหญ่การจัดเรียงจะเป็นวิธีที่มีประสิทธิภาพมากขึ้น เนื่องจากมันเกิดขึ้นในหน่วยความจำ jvm มันอาจทำให้เกิดข้อผิดพลาด Out of Memory

2. การรวบรวมคำสั่งซื้อ

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

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