ชุดเป็นเพียงชุดของวัตถุที่ไม่ซ้ำกัน ไม่ซ้ำกันหมายความว่าไม่มีวัตถุสองชิ้นที่มีค่าเท่ากัน อาจสั่งหรือไม่สั่งก็ได้ทั้งนี้ขึ้นอยู่กับการนำชุดไปใช้งาน ชุด Java เป็นประเภทข้อมูลนามธรรม (ADT) มีการดำเนินการที่สำคัญบางอย่าง (โดยที่ T แทนประเภทข้อมูลใดๆ เช่น int, String หรือวัตถุคลาสใดๆ):
boolean add(T item): ส่งคืนค่าจริงหากเพิ่มรายการลงในชุดได้สำเร็จ และส่งคืนค่าเท็จหากรายการนั้นอยู่ในชุดแล้วboolean remove(T item): ส่งคืนค่าจริงหากรายการถูกลบออกจากชุดสำเร็จและคืนค่าเท็จมิฉะนั้น (หากรายการไม่ได้อยู่ในชุด)boolean contains(T item): คืนค่าจริงถ้ารายการอยู่ในชุดและกลับเป็นเท็จมิฉะนั้นboolean isEmpty(): คืนค่าจริงถ้าชุดว่างและกลับเป็นเท็จมิฉะนั้น
contains()ให้รันไทม์ที่ยอดเยี่ยมสำหรับสิ่งนี้: ความซับซ้อนของเวลา O(1) หรือ O(log n) ขึ้นอยู่กับว่าการใช้งานที่ใช้นั้นเป็น a HashSetหรือ aTreeSetตามลำดับ แล้วชุดจะใช้ทำอะไรได้บ้าง? ถ้าคุณต้องการติดตามวัตถุที่แตกต่างกันจำนวนมาก เช่น รหัส ชื่อ หรือตัวระบุเฉพาะอื่นๆ และตรวจสอบบ่อยๆ ว่ามีรายการอยู่ในคอลเล็กชันดังกล่าวหรือไม่ ชุดนั้นน่าจะเป็นทางเลือกที่ดี ต่อไปนี้คือตัวอย่างการใช้ชุด: ลองนึกภาพว่าคุณมีรายการของStudentวัตถุที่เป็นตัวแทนของนักเรียนทั้งหมดในชั้นเรียนที่กำหนด แต่ละอันStudentอาจมีชื่อเฉพาะ (สตริง) และเกรด (int) สำหรับคลาสนี้ หากคุณต้องการอ้างอิงรายชื่อนักเรียน A ทั้งหมด (เกรด >=90) บ่อยๆ การวนดูรายชื่อนี้และตรวจสอบเกรดของนักเรียนทุกคนทุกครั้งคงไม่ใช่เรื่องน่าเบื่อ คุณอาจใช้HashSetสตริงที่ติดตามนักเรียน A ทั้งหมดในชั้นเรียนแทน เช่น:
- ทุกครั้งที่มีการอัปเดตเกรดของนักเรียน คุณสามารถตรวจสอบว่าเกรดใหม่ของนักเรียนนั้นมากกว่าหรือเท่ากับ 90 หรือไม่
- ถ้าใช่ ให้เพิ่มเข้าไปในชุดของนักเรียน A โดยใช้
add()- หากพวกเขาเป็นนักเรียนอยู่แล้ว การดำเนินการนี้จะถูกละเว้น
- ถ้าไม่ใช่ ให้ลบออกจากชุดของนักเรียน A โดยใช้
remove()- หากพวกเขาไม่ใช่นักเรียน ณ จุดนี้ การดำเนินการนี้จะถูกละเว้น
- ถ้าใช่ ให้เพิ่มเข้าไปในชุดของนักเรียน A โดยใช้
contains(“Johnny Appleseed”)ที่กองถ่าย แน่นอนว่านี่เป็นเพียงตัวอย่างหนึ่งของกรณีการใช้งานสำหรับชุดหนึ่ง และปัญหาเฉพาะในการติดตามนักเรียน A สามารถแก้ไขได้ด้วยวิธีอื่น
การใช้งาน: HashSet ใน Java และตัวอย่าง Java TreeSet
ทั้งHashSetใน Java และTreeSetใน Java มาในรูปแบบjava.utils package. คุณสามารถนำเข้าได้ดังนี้:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
หรือ
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
ความแตกต่างที่สำคัญระหว่าง Java HashSetและ Java TreeSetก็คือTreeSetการเรียงลำดับ ในขณะที่HashSetไม่ใช่ นี่คือสาเหตุที่TreeSetมีความซับซ้อนของเวลา O(log n) สำหรับการดำเนินการหลัก ในขณะที่HashSetมี O(1) หรือความซับซ้อนของเวลาคงที่ ต้องTreeSetรักษาความสงบเรียบร้อยตลอดเวลา นอกจากการทำงานของชุดคีย์ที่กล่าวถึงก่อนหน้านี้แล้ว ทั้ง Java HashSetและTreeSetใน Java ยังมีฟังก์ชันที่เป็นประโยชน์อื่นๆ อีกเล็กน้อย:
void clear(): ล้างชุดของวัตถุทั้งหมดint size(): ส่งกลับจำนวนของวัตถุในชุดObject clone(): ส่งกลับสำเนาตื้นของชุดIterator iterator(): ส่งกลับ iterator ไปยังชุดเริ่มต้นที่วัตถุแรก
size()หากคุณต้องการดูจำนวนนักเรียน 'A' ที่คุณมี หรือclear()ถ้าคุณต้องการล้างรายชื่อเมื่อสิ้นสุดภาคเรียน คุณอาจใช้clone()สร้างและเก็บโคลนรายชื่อนักเรียน A ณ เวลาใดเวลาหนึ่ง เช่น ระหว่างรายงานกลางภาค (วิธีนี้การโคลนจะไม่เป็นปัจจุบันพร้อมกับต้นฉบับ)
ตัวอย่าง Java HashSet
นี่คือตัวอย่างสั้นๆ ของ aHashSetof Strings ที่ใช้ใน Java:
import java.util.HashSet;
class HashSetDemo {
public static void main(String[] args)
{
// create a HashSet of Strings
HashSet<String> hs = new HashSet<String>();
// Add elements using the add() method
hs.add("Collin");
hs.add("Bob");
hs.add("Abigail");
// Duplicates will ignored; this statement is useless
hs.add("Collin");
System.out.println(hs);
System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
System.out.println("Max is in the set (T/F): " + hs.contains("Max"));
}
}
เอาต์พุต: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false
ตัวอย่าง Java TreeSet
ตัวอย่างชุด Java สามารถช่วยให้คุณเข้าใจทฤษฎีได้ นี่คือตัวอย่างสั้นๆ ของ aTreeSetof Strings ที่ใช้ใน Java:
import java.util.TreeSet;
class TreeSetDemo {
public static void main(String[] args)
{
// create a TreeSet of Strings
TreeSet<String> ts = new TreeSet<String>();
// Add elements using the add() method.
ts.add("Collin");
ts.add("Bob");
ts.add("Abigail");
// Duplicates will ignored; this statement is useless
ts.add("Collin");
// printing the set prints the names in alphabetical order!
System.out.println(ts);
System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
System.out.println("Size of the set: " + ts.size());
ts.clear();
System.out.println("Size of the set after clear(): " + ts.size());
}
}
เอาท์พุต: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
นั่นคือทั้งหมด! หวังว่านี่จะช่วยได้😊
GO TO FULL VERSION