מה זה Java Set
Set הוא ממשק מ-Java Collection Framework, אך Set אינו אוסף מסודר, בניגוד ל- List . זה אומר שרכיבי Java Set נשמרים ללא סדר מסוים. אז אין שליטה על המיקום שבו אתה יכול להכניס אלמנט. כמו כן, אינך יכול לגשת לאלמנטים לפי האינדקס שלהם. מבחינה מתמטית, סט הוא אוסף של אלמנטים ייחודיים. למעשה, מדובר באוסף לא מסודר (אוסף לא מסודר), שלא ניתן לאחסן בו אלמנטים זהים. אם תוסיף בכוונה רכיב משוכפל לסט , הפעולה הזו תתעלם והסט לא ישתנה. עם זאת מותר לאחסן בו רכיב ריק אחד.הגדר יישומים
Java Set הוא ממשק, אז אתה צריך להשתמש באחד המימושים שלו כדי ליצור אובייקטים. אלה הם HashSet , TreeSet ו- LinkedHashSet . ב- Set s, כל אלמנט מאוחסן רק במופע אחד, והטמעות שונות של Set משתמשות בסדר שונה לאחסון אלמנטים. ב- HashSet , סדר האלמנטים נקבע על ידי אלגוריתם מורכב. אם סדר האחסון חשוב לך, השתמש במיכל TreeSet , המאחסן אובייקטים ממוינים בסדר עולה לפי סדר השוואה, או LinkedHashSet , המאחסן אלמנטים בסדר נוסף. לרוב משתמשים בסטים לבדיקת חברות כך שתוכלו לבדוק בקלות אם אובייקט שייך לסט נתון, כך שבפועל נבחר בדרך כלל מימוש HashSet שמותאם לחיפוש מהיר. HashSet הוא אוסף שמשתמש בערכי ה-hash שלהם המוחזרים בשיטת hashCode() כדי לאחסן אלמנטים באופן פנימי. כלומר, בתוך ה- HashSet<E> מאוחסן האובייקט HashMap<E, Object>, המאחסן את הערכים של ה- HashSet כמפתחות . שימוש בקודי hash מאפשר לך לחפש במהירות, להוסיף ולהסיר אלמנטים מ- Set . LinkedHashSet הוא HashSet המאחסן גם אלמנטים ברשימה מקושרת. HashSet רגיל אינו שומר על סדר אלמנטים. ראשית, רשמית זה פשוט לא קיים, ושנית, אפילו הסדר הפנימי יכול להשתנות באופן דרמטי כאשר רק אלמנט אחד נוסף. ואתה יכול לקבל איטרטור מ- LinkedHashSet ולהשתמש בו כדי לעבור על כל האלמנטים בסדר המדויק שבו הם נוספו ל- LinkedHashSet . לא לעתים קרובות, אבל לפעמים זה יכול להיות מאוד הכרחי. A TreeSet הוא אוסף המאחסן אלמנטים כעץ לפי ערך. בתוך TreeSet<E> נמצא TreeMap<E, Object> המאחסן את כל הערכים הללו. ומפת העץ הזו משתמשת בעץ בינארי מאוזן אדום-שחור כדי לאחסן אלמנטים. לכן, יש לו פעולות add() , remove() , contains() מהירות מאוד.צור אובייקט סט
כדי ליצור אובייקט סט , אתה יכול להשתמש באחד מהטופס הבא:Set<Integer> intSet = new HashSet<>();
Set<String> vSet = new HashSet<>();
Set mySet = new LinkedHashSet();
HashSet<String> myHashset = new HashSet<>();
הנה דוגמה פשוטה, שבה אנו יוצרים 2 Set s, HashSet ו- LinkedHashSet , ומוסיפים לכל אחד עבור 5 אלמנטים. אנחנו יכולים להשתמש בשיטת add() בשביל זה.
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
public class HashSetTest {
public static void main(String[] args) {
Set mySet = new HashSet();
Set mySet2 = new LinkedHashSet();
//adding some string elements
mySet.add("Stuart");
mySet.add("Alex");
mySet.add("Johnny");
mySet.add("Igor");
mySet.add("Bel");
System.out.println(mySet);
mySet2.add("Stuart");
mySet2.add("Alex");
mySet2.add("Johnny");
mySet2.add("Igor");
mySet2.add("Bel");
System.out.println(mySet2);
}
}
להלן הפלט של התוכנית:
Java Set Methods
הנה כמה מהשיטות החשובות של Java Set :-
add(E e) בוליאני . מוסיף את הרכיב שצוין לקבוצה אם הוא לא קיים כבר (פעולה אופציונלית).
-
הסר בוליאני (Object o) . מסיר את הרכיב שצוין מקבוצה זו אם הוא קיים (פעולה אופציונלית).
-
boolean removeAll(אוסף ג) . מסיר מקבוצה זו את כל הרכיבים שלו הכלולים באוסף שצוין (פעולה אופציונלית).
-
boolean retainAll(אוסף ג) . שומר רק על הרכיבים בקבוצה זו הכלולים באוסף שצוין (פעולה אופציונלית).
-
void clear() . מסיר את כל האלמנטים מהסט.
-
Iterator iterator() . מחזירה איטרטור מעל האלמנטים בקבוצה זו.
-
int size() . הוא משמש כדי לקבל את מספר האלמנטים בסט.
-
boolean isEmpty() . כדי לבדוק אם הסט ריק או לא.
-
boolean contains(Object o) . מחזירה true אם קבוצה זו מכילה את האלמנט שצוין.
-
Iterator iterator() . מחזירה איטרטור מעל האלמנטים בקבוצה זו. האלמנטים מוחזרים ללא סדר מסוים.
-
Object[] toArray() . מחזירה מערך המכיל את כל האלמנטים בקבוצה זו. אם הסט הזה נותן ערבויות לגבי הסדר שבו הרכיבים שלו מוחזרים על ידי האיטרטור שלו, שיטה זו חייבת להחזיר את האלמנטים באותו סדר.
Java Set דוגמה לפעולות עיקריות
בדוגמה זו, אנו יוצרים מערך של מחרוזות ולאחר מכן מעבירים אותו ל- mySet באמצעות פעולת Arrays.asList . לאחר מכן אנו מסירים עוד כמה אלמנטים ומוסיפים עוד כמה. במקרה זה, אחד האלמנטים בסט כבר קיים: הוא לא יתווסף. ננסה גם את הפעולות של בדיקת ריקנות isEmpty() , קביעת גודל ה-set size() וניקוי הסט מכל האלמנטים clear() .import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class HashSetTest2 {
public static void main(String[] args) {
//creating a string Array with some names
String [] friends = {"Stuart", "Ivy", "Johnny", "Alex", "Igor", "Tanya"};
//creating a new set and adding elements from string array into it
Set<String> mySet = new HashSet<>(Arrays.asList(friends));
System.out.println(mySet);
//removing two elements from the set
mySet.remove("Igor");
mySet.remove("Stuart");
System.out.println(mySet);
//adding 2 new Elements into set
mySet.add("Dasha");
mySet.add("Alex"); //it's second Alex, can't be added
System.out.println(mySet);
//cheking the size of mySet
int size = mySet.size();
System.out.println("The quantity of set's elements = " + size);
//Checking if the set is empty
System.out.println("Is mySet empty? " + mySet.isEmpty());
//checking if some elements are in set
System.out.println("Is Igor in set? " + mySet.contains("Igor"));
System.out.println("Is Johnny in set? "+ mySet.contains("Johnny"));
//deleting all elements from the set
mySet.clear();
System.out.println("Is mySet empty now? " + mySet.isEmpty());
}
}
הפלט של התוכנית נמצא כאן:
דוגמה עם LinkedHashSet והגדר ל-Array
בוא נכתוב עוד תוכנית. בו ניצור סט המבוסס על ה- LinkedHashSet , נוסיף לו אלמנטים, ולאחר מכן נמיר את הסט למערך.import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSet3 {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("C");
set.add("D");
set.add("E");
set.add("F");
set.add("G");
set.add("A");
set.add("B");
System.out.println(set);
set.remove("F");// removing an element from our set
set.remove("C sharp");//trying to remove element that isn't in set
System.out.println(set.remove("C sharp"));
System.out.println("Print our set with elements removed: ");
System.out.println(set);
//set to array
String strArray[] = set.toArray(new String[set.size()]);
System.out.println("New Array from set: ");
System.out.println(Arrays.toString(strArray));
System.out.println(strArray[0]);
}
}
להלן הפלט של התוכנית:
תן דוגמה עם איטרטור
בואו ניצור קבוצה, ואז נדפיס אותה באמצעות איטרטור, ולאחר מכן נסיר ממנה את כל המספרים הזוגיים, גם באמצעות איטרטור.import java.util.*;
public class SetTest5
{
public static void main(String[] args)
{
Set<Integer> mySet = new HashSe<>();
for(int i = 0; i < 10; i++)
mySet.add(i);
Iterator iterator = mySet.iterator();
//simple iteration
while(iterator.hasNext()){
int i = (int) iterator.next();
}
System.out.println(" " + mySet);
//modification of mySet using iterator - removing all even numbers
iterator = mySet.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 == 0) iterator.remove();
}
System.out.println(mySet);
}
}
הפלט של התוכנית נמצא כאן:
דוגמה עם TreeSet
אם המיון חשוב לך, השתמש ביישום TreeSet . בדוגמה הקצרה הזו נמלא את הסט בשמות החברים, כמו בדוגמאות הקודמות. עם זאת, ב- TreeSet ממוין , האלמנטים ייכתבו מיד בסדר ממוין. במקרה זה, השמות יוצגו בסדר אלפביתי.import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
Set mySet = new TreeSet<>();
mySet.add("Stuart");
mySet.add("Alex");
mySet.add("Johnny");
mySet.add("Igor");
mySet.add("Bel");
System.out.println(mySet);
}
הפלט הוא:
מסקנות קצרות
-
ממשק Java Set הוא חלק ממסגרת Java Collections.
-
שיעורים מיושמים: AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet .
-
יישומי הסט הפופולריים ביותר הם HashSet , LinkedHashSet ו- TreeSet .
-
סדר רכיבי HashSet נקבע על ידי אלגוריתם מורכב. אם סדר האחסון חשוב לך, השתמש במיכל TreeSet , המאחסן אובייקטים ממוינים בסדר עולה לפי סדר השוואה, או LinkedHashSet , המאחסן אלמנטים בסדר נוסף.
-
לרוב, סטים משמשים לבדיקת חברות. כלומר, לבדוק האם עצם שייך לקבוצה נתונה במובן המתמטי. אז לרוב מכל יישומי ה-Set בפועל, בדרך כלל נבחר HashSet . יישום זה מותאם לחיפוש מהיר.
-
אינך יכול להוסיף אלמנטים כפולים לסט, כך שאתה יכול להשתמש ביישומים של ממשק ה-Set כדי לאחסן אלמנטים ייחודיים.
-
Set מאפשר לך להוסיף רק אלמנט null אחד.
-
הסט אינו רשימה ואינו תומך באינדקסים או מיקומים של האלמנטים שלו.
GO TO FULL VERSION