1. ภาชนะและคอลเลกชัน

คอนเทนเนอร์หรือคอลเลกชันคือคลาสที่ให้คุณจัดเก็บและประมวลผลออบเจกต์หลายรายการพร้อมกัน คุณรู้จักคอนเทนเนอร์สองประเภทแล้ว: อาร์เรย์และรายการ

Java มีคอลเลกชั่นหลายสิบคอลเลกชั่น ซึ่งแต่ละคอลเลกชั่นจัดเก็บอิลิเมนต์ด้วยวิธีเฉพาะของตัวเอง นี่คือบางส่วนของพวกเขา:

ของสะสม ระดับ คำอธิบาย
List
ArrayList
รายการ
LinkedList
รายการที่เชื่อมโยง
Vector
เวกเตอร์
Stack
ซ้อนกัน
Set
HashSet
ชุด
TreeSet
LinkedHashSet
Queue
PriorityQueue
คิว
ArrayQueue
Map
HashMap
แผนที่/พจนานุกรม
TreeMap
HashTable

ชื่อค่อนข้างคลุมเครือที่นี่ ในภาษาการเขียนโปรแกรมส่วนใหญ่ โครงสร้างข้อมูลทั้งหมดเหล่านี้เรียกว่าคอลเลกชั่น แต่ไม่ใช่ในภาษาจาวา ใน Java คลาสเหล่านี้บางคลาสใช้Collectionอินเทอร์เฟซ ในขณะที่คลาสอื่นๆ ไม่ได้ใช้

ดังนั้น คอลเล็กชันจึงแบ่งออกเป็นคอลเล็กชันในความหมายกว้างและคอลเล็กชันในความหมายแคบ (เฉพาะคอลเล็กชันที่ใช้Collectionอินเทอร์เฟซ)

ดังนั้น เพื่อหลีกเลี่ยงความสับสน เมื่อเราพูดถึงคอลเลคชันเราหมายถึงในความหมายที่แคบ เช่น คลาสที่ใช้Collectionอินเทอร์เฟซ , ListและSetประเภทQueueเป็นคอลเล็กชันทั้งหมด คอลเลกชั่นในความหมายกว้างๆ เรียกว่าตู้คอนเทนเนอร์ ซึ่งรวมถึงประเภทที่ชอบMapและอาร์เรย์


2. HashSetของสะสม

ชั้นHashSetเรียนเป็นคอลเลกชันชุดทั่วไป ในหลาย ๆ ด้านจะคล้ายกับArrayListชั้นเรียน ในบางแง่ มันเป็นเวอร์ชันดั้งเดิมมากกว่า

คุณสามารถสร้างHashSetวัตถุโดยใช้คำสั่งเช่น:

HashSet<Type> name = new HashSet<Type>();

Typeประเภทขององค์ประกอบที่เราจะจัดเก็บไว้ในHashSetคอลเลกชันคือที่ใด

คลาสHashSetมีเมธอดดังนี้:

วิธี คำอธิบาย
void add(Type value)
เพิ่มvalueองค์ประกอบในคอลเลกชัน
boolean remove(Type value)
ลบvalueองค์ประกอบออกจากคอลเลกชัน
ส่งกลับtrueหากมีองค์ประกอบดังกล่าว
boolean contains(Type value)
ตรวจสอบว่าคอลเลกชันมีvalueองค์ประกอบ หรือไม่
void clear()
ล้างคอลเลกชัน ลบองค์ประกอบทั้งหมด
int size()
ส่งกลับจำนวนขององค์ประกอบในคอลเลกชัน

นี่คือตัวอย่างของการใช้ชุด

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

รหัส บันทึก
HashSet<String> set = new HashSet<String>();

set.add("Hello");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
สร้างHashSetวัตถุที่เก็บStringองค์ประกอบ


เราเพิ่มคำทักทายในภาษาต่างๆ ให้กับsetตัวแปร




อ่านบรรทัดจากคอนโซล


หากสตริงอยู่ในชุดคำทักทายของเรา แสดงว่าเรากล่าวคำอำลา


3. ชุด

คอลเลกชัน นี้Setออกแบบมาเพื่อเก็บองค์ประกอบต่างๆ จึงเรียกว่าSet(ชุด) คอลเลกชันนี้มีสามคุณสมบัติ

การดำเนินการในชุด

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

ไม่มีการสั่งซื้อ

องค์ประกอบในคอลเลกชันนี้ไม่มีดัชนี คุณไม่สามารถรับองค์ประกอบจากดัชนี หรือเขียนค่าไปยังคอลเลกชันที่ดัชนีเฉพาะได้ ชุดไม่มีget()และset()วิธีการ

องค์ประกอบที่เป็นเอกลักษณ์

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

การหาองค์ประกอบ

เมื่อคุณเพิ่มองค์ประกอบใหม่ ลบองค์ประกอบ หรือตรวจสอบว่ามีองค์ประกอบอยู่ในชุดหรือไม่ การค้นหาองค์ประกอบจะดำเนินการในเมธอด องค์ประกอบที่ผ่านจะถูกเปรียบเทียบกับองค์ประกอบของคอลเล็กชันก่อน จากhashCode()นั้นหากค่าที่ส่งกลับโดยhashCode()การจับคู่ ก็จะตามมาequals()ด้วย



4. การเปรียบเทียบคอลเลกชัน: ListเทียบกับSet

ลองเปรียบเทียบคอลเลกชันสองประเภท: ListและSetเราจะดูความแตกต่างหลัก เมื่อประเภทหนึ่งได้เปรียบกว่าอีกประเภทหนึ่ง และในทางกลับกัน

ลองเปรียบเทียบ List และ Set โดยใช้ของเล่นเป็นตัวอย่าง

คอListลเลกชัน (รายการ)เป็นเหมือนชุดของเล่นที่จัดเรียงตามผนังในห้องเด็กเล่น คุณสามารถเพิ่มของเล่นที่ส่วนท้ายของรายการได้ ถ้าจำเป็นจริง ๆ ก็ใส่ตรงกลางก็ได้ (แต่ต้องย้ายของเล่นที่มีอยู่บางส่วน)

ของเล่นแต่ละชิ้นมีดัชนี คุณสามารถอ้างอิงถึงของเล่นตามดัชนีของมัน และแทนที่ของเล่นหมายเลข 7 ด้วยของเล่นหมายเลข 13 คุณสามารถลบของเล่นหมายเลข 4 ออกจากรายการได้ ในที่สุด คุณสามารถเรียนรู้ดัชนีของของเล่นแต่ละชิ้นในรายการ

คอSetลเลกชัน (ชุด)เป็นเหมือนกองของเล่นที่อยู่ตรงกลางพื้น คุณสามารถเพิ่มของเล่นลงในกอง และคุณสามารถเอาของเล่นออกจากกองได้ แต่ของเล่นเหล่านี้ไม่มีดัชนีที่แน่นอนที่เกี่ยวข้องกับพวกเขา

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

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

สำหรับกรณีเช่นนี้ คุณต้องSetรวบรวม การใช้งานที่ได้รับความนิยมมากที่สุดคือHashSetคลาส