ชุดเป็นเพียงชุดของวัตถุที่ไม่ซ้ำกัน ไม่ซ้ำกันหมายความว่าไม่มีวัตถุสองชิ้นที่มีค่าเท่ากัน อาจสั่งหรือไม่สั่งก็ได้ทั้งนี้ขึ้นอยู่กับการนำชุดไปใช้งาน ชุด 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
นี่คือตัวอย่างสั้นๆ ของ aHashSet
of String
s ที่ใช้ใน 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 สามารถช่วยให้คุณเข้าใจทฤษฎีได้ นี่คือตัวอย่างสั้นๆ ของ aTreeSet
of String
s ที่ใช้ใน 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