کلاس
HashSet
انٹرفیس کو لاگو کرتی ہے Set
، ایک ہیش ٹیبل پر مبنی ہے، اور اسے ایک مثال کے ذریعے بھی حمایت حاصل ہے HashMap
۔ چونکہ HashSet
عناصر کا حکم نہیں ہے، اس بات کی کوئی ضمانت نہیں ہے کہ عناصر کچھ عرصے کے بعد اسی ترتیب میں ہوں گے۔ شامل کرنے، حذف کرنے اور تلاش کرنے کی کارروائیاں مستقل وقت میں انجام دی جائیں گی، بشرطیکہ ہیش فنکشن عناصر کو "بالٹی" میں صحیح طریقے سے تقسیم کرے، جس پر بعد میں بات کی جائے گی۔ کے بارے میں چند اہم نکات HashSet
:
- کیونکہ کلاس انٹرفیس کو لاگو کرتی ہے
Set
، یہ صرف منفرد اقدار کو ذخیرہ کر سکتا ہے؛ - NULL اقدار کو ذخیرہ کر سکتے ہیں؛
- جس ترتیب میں عناصر کو شامل کیا جاتا ہے اس کا حساب ہیش کوڈ کے ذریعے کیا جاتا ہے۔
HashSet
Serializable
اور کو بھی لاگو کرتا ہےCloneable
۔
HashSet
میں عناصر کی تعداد کے براہ راست متناسب ہونا چاہیے ۔ لہذا، کارکردگی کو برقرار رکھنے کے لیے، یہ ضروری ہے کہ ابتدائی صلاحیت کو بہت زیادہ (یا بوجھ کا عنصر بہت کم) متعین نہ کیا جائے۔ ابتدائی صلاحیت - ہیش ٹیبل میں خلیوں کی ابتدائی تعداد ("بن")۔ اگر تمام سیلز بھر جائیں تو ان کی تعداد خود بخود بڑھ جائے گی۔ لوڈ فیکٹر اس بات کا ایک پیمانہ ہے کہ اس کی صلاحیت خود بخود بڑھنے سے پہلے یہ کتنا بھرا ہو سکتا ہے۔ جب میں عناصر کی تعداد ابتدائی صلاحیت اور لوڈ فیکٹر کی پیداوار سے زیادہ ہو جاتی ہے، تو ہیش ٹیبل کو دوبارہ ہیش کیا جاتا ہے (عناصر کے ہیش کوڈز کا دوبارہ حساب لگایا جاتا ہے اور ٹیبل کو حاصل شدہ اقدار کے مطابق دوبارہ بنایا جاتا ہے) اور نمبر اس میں خلیات کی تعداد دوگنی ہو جاتی ہے۔ لوڈ فیکٹر = ٹیبل / ہیش ٹیبل سائز میں ذخیرہ شدہ عناصر کی تعداد مثال کے طور پر، اگر ٹیبل میں سیلز کی ابتدائی تعداد 16 ہے، اور لوڈ فیکٹر 0.75 ہے، تو یہ اس کے بعد ہوتا ہے جب بھرے ہوئے سیلز کی تعداد 12 تک پہنچ جاتی ہے، خلیوں کی تعداد خود بخود بڑھ جائے گی۔ لوڈ فیکٹر اور ابتدائی صلاحیت دو اہم عوامل ہیں جو کی کارکردگی کو متاثر کرتے ہیں ۔ 0.75 کا بوجھ عنصر اوسطاً اچھی کارکردگی فراہم کرتا ہے۔ اگر اس پیرامیٹر کو بڑھایا جاتا ہے، تو میموری کا بوجھ کم ہو جائے گا (کیونکہ یہ دوبارہ ہیش اور دوبارہ تعمیر کرنے کی تعداد کو کم کر دے گا)، لیکن یہ اپنڈ اور تلاش کے کاموں کو متاثر کرے گا۔ دوبارہ ہیشنگ پر خرچ ہونے والے وقت کو کم کرنے کے لیے، آپ کو صحیح ابتدائی صلاحیت پیرامیٹر کا انتخاب کرنا ہوگا۔ اگر ابتدائی صلاحیت لوڈ فیکٹر سے تقسیم کردہ عناصر کی زیادہ سے زیادہ تعداد سے زیادہ ہے، تو دوبارہ ہیشنگ آپریشن بالکل نہیں ہوگا۔ HashSet
HashMap
HashSet
HashSet
HashSet
اہم: HashSet
بلٹ ان سنکرونائزیشن کے ساتھ ڈیٹا کا ڈھانچہ نہیں ہے، لہذا اگر ایک ہی وقت میں متعدد تھریڈز اس پر کام کر رہے ہیں، اور ان میں سے کم از کم ایک تبدیلی کرنے کی کوشش کر رہا ہے، تو اسے باہر سے مطابقت پذیر رسائی فراہم کرنا ضروری ہے۔ یہ اکثر کسی اور مطابقت پذیر شے کی قیمت پر کیا جاتا ہے جو HashSet
. اگر ایسی کوئی چیز نہیں ہے، تو Collections.synchronizedSet()
. یہ اس وقت کے ساتھ مطابقت پذیری سے باہر ہونے والی کارروائیوں کو روکنے کا بہترین طریقہ ہے HashSet
۔
Set s = Collections.synchronizedSet(new HashSet(...));
ہیش سیٹ کنسٹرکٹرز:
HashSet h = new HashSet();
- ڈیفالٹ کنسٹرکٹر۔ پہلے سے طے شدہ ابتدائی گنجائش 16 ہے، لوڈ فیکٹر 0.75 ہے۔HashSet h = new HashSet(int initialCapacity)
- دی گئی ابتدائی صلاحیت کے ساتھ کنسٹرکٹر۔ لوڈ فیکٹر – 0.75۔HashSet h = new HashSet(int initialCapacity, float loadFactor);
- دی گئی ابتدائی صلاحیت اور بوجھ کے عنصر کے ساتھ ایک کنسٹرکٹر۔HashSet h = new HashSet(Collection C)
- ایک کنسٹرکٹر جو دوسرے مجموعہ سے عناصر کو شامل کرتا ہے۔
HashSet
:
import java.util.*;
class Test
{
public static void main(String[]args)
{
HashSet<String> h = new HashSet<String>();
// Add elements to the HashSet using the add() method
h.add("India");
h.add("Australia");
h.add("South Africa");
h.add("India");// try to add another same element
// Print the elements of the HashSet to the console
System.out.println(h);
System.out.println("List contains India or not:" +
h.contains("India"));
// Remove elements from the set using the remove() method
h.remove("Australia");
System.out.println("List after removing Australia:"+h);
// Loop through the elements of the HashSet using an iterator:
System.out.println("Iterating over list:");
Iterator<String> i = h.iterator();
while (i.hasNext())
System.out.println(i.next());
}
}
نتیجہ:
[South Africa, Australia, India]
List contains India or not:true
List after removing Australia:[South Africa, India]
Iterating over list:
South Africa
India
تمام کلاسز جو انٹرفیس کو لاگو کرتی ہیں Set
اندرونی طور پر نفاذ کے ذریعہ تعاون یافتہ ہیں Map
۔ HashSet
کا استعمال کرتے ہوئے عناصر کو ذخیرہ کرتا ہے HashMap
۔ اگرچہ HashMap
کسی عنصر کو شامل کرنے کے لیے ایک عنصر کو کلیدی قدر کے جوڑے کے طور پر پیش کیا جانا چاہیے، لیکن HashSet
صرف قدر کو شامل کیا جاتا ہے۔ درحقیقت، ہم جس قدر کو پاس کرتے ہیں HashSet
وہ آبجیکٹ کی کلید ہے HashMap
، اور ایک مستقل کو قدر کے طور پر استعمال کیا جاتا ہے HashMap
۔ اس طرح، ہر کلیدی قدر کے جوڑے میں، تمام کلیدوں کی قدر ایک جیسی ہوگی۔ میں نفاذ :HashSet
java doc
private transient HashMap map;
// Constructor - 1
// All constructors implicitly create a HashMap object.
public HashSet()
{
// Create an implicit HashMap object
map = new HashMap();
}
// Constructor- 2
public HashSet(int initialCapacity)
{
// Create an implicit HashMap object
map = new HashMap(initialCapacity);
}
// An object of the Object class, each time acting as a value in the HashMap
private static final Object PRESENT = new Object();
اگر آپ طریقہ دیکھیں add()
y HashSet
:
public boolean add(E e)
{
return map.put(e, PRESENT) == null;
}
آپ دیکھ سکتے ہیں کہ طریقہ add()
y اندرونی آبجیکٹ پر HashSet
طریقہ کو کال کرتا ہے ، اسے کلید کے طور پر شامل کیے جانے والے عنصر کو پاس کرتا ہے، اور PRESENT مستقل کو قدر کے طور پر۔ طریقہ اسی طرح کام کرتا ہے ۔ اسے اندرونی آبجیکٹ کا طریقہ کہتے ہیں : put()
HashMap
remove()
remove()
HashMap
public boolean remove(Object o)
{
return map.remove(o) == PRESENT;
}
HashSet
ایک ہیش ٹیبل پر مبنی ہے، اور شامل کرنے، حذف کرنے، یا تلاش کرنے کی کارروائیاں، اوسطاً، مستقل (O(1)) وقت میں مکمل ہوں گی ۔ طریقے HashSet
:
boolean add(E e)
: میں ایک عنصر جوڑتا ہےHashSet
، اگر کوئی نہیں ہے، لیکن اگر ایسا عنصر پہلے سے موجود ہے، تو طریقہ غلط لوٹاتا ہے ۔void clear():
سیٹ سے تمام عناصر کو ہٹاتا ہے۔boolean contains(Object o)
اگر دیا ہوا عنصر سیٹ میں موجود ہو تو درست لوٹاتا ہے ۔boolean remove(Object o)
: اگر موجود ہو تو سیٹ سے دیئے گئے عنصر کو ہٹا دیتا ہے۔Iterator iterator()
: سیٹ کے عناصر کے لیے ایک تکرار کرنے والا لوٹاتا ہے۔boolean isEmpty()
: اگر سیٹ میں کوئی عناصر نہ ہوں تو درست لوٹاتا ہے۔Object clone()
: سطح کی کلوننگ کرتا ہےHashSet
۔
GO TO FULL VERSION