CodeGym /จาวาบล็อก /สุ่ม /Java ตั้งเป็นอินเทอร์เฟซ
John Squirrels
ระดับ
San Francisco

Java ตั้งเป็นอินเทอร์เฟซ

เผยแพร่ในกลุ่ม
ชุดเป็นเพียงชุดของวัตถุที่ไม่ซ้ำกัน ไม่ซ้ำกันหมายความว่าไม่มีวัตถุสองชิ้นที่มีค่าเท่ากัน อาจสั่งหรือไม่สั่งก็ได้ทั้งนี้ขึ้นอยู่กับการนำชุดไปใช้งาน ชุด Java เป็นประเภทข้อมูลนามธรรม (ADT) มีการดำเนินการที่สำคัญบางอย่าง (โดยที่ T แทนประเภทข้อมูลใดๆ เช่น int, String หรือวัตถุคลาสใดๆ): Java ตั้งเป็นอินเทอร์เฟซ - 1
  • boolean add(T item): ส่งคืนค่าจริงหากเพิ่มรายการลงในชุดได้สำเร็จ และส่งคืนค่าเท็จหากรายการนั้นอยู่ในชุดแล้ว
  • boolean remove(T item): ส่งคืนค่าจริงหากรายการถูกลบออกจากชุดสำเร็จและคืนค่าเท็จมิฉะนั้น (หากรายการไม่ได้อยู่ในชุด)
  • boolean contains(T item): คืนค่าจริงถ้ารายการอยู่ในชุดและกลับเป็นเท็จมิฉะนั้น
  • boolean isEmpty(): คืนค่าจริงถ้าชุดว่างและกลับเป็นเท็จมิฉะนั้น
ชุดใน Java มีลายเซ็นฟังก์ชันที่อธิบายตนเองได้ค่อนข้างดี (ตามที่ควร) หากคุณเพิ่มรายการที่เหมือนกันสองรายการในชุด เฉพาะรายการแรกที่เพิ่มเข้าไปเท่านั้นที่จะอยู่ในชุด ความพยายามที่จะเพิ่มรายการเดียวกันในภายหลังทั้งหมดจะถูกละเว้นเว้นแต่รายการนั้นจะถูกลบออกก่อน หนึ่งในการดำเนินการของเซตที่ใช้บ่อยที่สุดคือการตรวจสอบว่ารายการอยู่ในเซตที่กำหนดหรือไม่ ฟังก์ชันcontains()ให้รันไทม์ที่ยอดเยี่ยมสำหรับสิ่งนี้: ความซับซ้อนของเวลา O(1) หรือ O(log n) ขึ้นอยู่กับว่าการใช้งานที่ใช้นั้นเป็น a HashSetหรือ aTreeSetตามลำดับ แล้วชุดจะใช้ทำอะไรได้บ้าง? ถ้าคุณต้องการติดตามวัตถุที่แตกต่างกันจำนวนมาก เช่น รหัส ชื่อ หรือตัวระบุเฉพาะอื่นๆ และตรวจสอบบ่อยๆ ว่ามีรายการอยู่ในคอลเล็กชันดังกล่าวหรือไม่ ชุดนั้นน่าจะเป็นทางเลือกที่ดี ต่อไปนี้คือตัวอย่างการใช้ชุด: ลองนึกภาพว่าคุณมีรายการของStudentวัตถุที่เป็นตัวแทนของนักเรียนทั้งหมดในชั้นเรียนที่กำหนด แต่ละอันStudentอาจมีชื่อเฉพาะ (สตริง) และเกรด (int) สำหรับคลาสนี้ หากคุณต้องการอ้างอิงรายชื่อนักเรียน A ทั้งหมด (เกรด >=90) บ่อยๆ การวนดูรายชื่อนี้และตรวจสอบเกรดของนักเรียนทุกคนทุกครั้งคงไม่ใช่เรื่องน่าเบื่อ คุณอาจใช้HashSetสตริงที่ติดตามนักเรียน A ทั้งหมดในชั้นเรียนแทน เช่น:
  • ทุกครั้งที่มีการอัปเดตเกรดของนักเรียน คุณสามารถตรวจสอบว่าเกรดใหม่ของนักเรียนนั้นมากกว่าหรือเท่ากับ 90 หรือไม่
    • ถ้าใช่ ให้เพิ่มเข้าไปในชุดของนักเรียน A โดยใช้add()
      • หากพวกเขาเป็นนักเรียนอยู่แล้ว การดำเนินการนี้จะถูกละเว้น
    • ถ้าไม่ใช่ ให้ลบออกจากชุดของนักเรียน A โดยใช้remove()
      • หากพวกเขาไม่ใช่นักเรียน ณ จุดนี้ การดำเนินการนี้จะถูกละเว้น
ด้วยระบบดังกล่าว คุณจะมีชุดนักเรียน 'A' ที่ทันสมัยทั้งหมดในชั้นเรียนของคุณ หากคุณต้องการตรวจสอบว่า Johnny Appleseed ทำได้ดีในชั้นเรียนของคุณหรือไม่ คุณสามารถทำได้ง่ายๆ โดยโทรไป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 ไปยังชุดเริ่มต้นที่วัตถุแรก
คุณสามารถจินตนาการถึงการใช้ฟังก์ชันเหล่านี้ในตัวอย่าง "รายชื่อนักเรียน A": คุณสามารถโทรหาsize()หากคุณต้องการดูจำนวนนักเรียน 'A' ที่คุณมี หรือclear()ถ้าคุณต้องการล้างรายชื่อเมื่อสิ้นสุดภาคเรียน คุณอาจใช้clone()สร้างและเก็บโคลนรายชื่อนักเรียน A ณ เวลาใดเวลาหนึ่ง เช่น ระหว่างรายงานกลางภาค (วิธีนี้การโคลนจะไม่เป็นปัจจุบันพร้อมกับต้นฉบับ)

ตัวอย่าง Java HashSet

นี่คือตัวอย่างสั้นๆ ของ a HashSetof 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 สามารถช่วยให้คุณเข้าใจทฤษฎีได้ นี่คือตัวอย่างสั้นๆ ของ a TreeSetof 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
นั่นคือทั้งหมด! หวังว่านี่จะช่วยได้😊
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION