CodeGym /جاوا بلاگ /Random-SD /جاوا هيش ٽيبل
John Squirrels
سطح
San Francisco

جاوا هيش ٽيبل

گروپ ۾ شايع ٿيل
Java Hashtable ڪلاس جاوا ڪليڪشن فريم ورڪ جي پراڻن ميمبرن مان هڪ آهي. اهو رياضياتي هيش ٽيبل ڊيٽا جي جوڙجڪ جو هڪ عمل آهي. جاوا ۾ هيش ٽيبل اندروني طور تي بالٽ تي مشتمل آهي جتي ڪي/ويل جوڙو ذخيرو ٿيل آهن. Hashtable بلڪل HashMap سان ملندڙ جلندڙ آهي . انهن جي وچ ۾ سڀ کان اهم فرق: Hashtable هم وقت سازي آهي جڏهن ته HashMap نه آهي.

ڊيٽا جي جوڙجڪ جي طور تي Hashtable

Hashtable هڪ ڊيٽا جي جوڙجڪ آهي جتي ڊيٽا هڪ صف جي شڪل ۾ ذخيرو ٿيل آهي. هر ڊيٽا جي قيمت هڪ منفرد اهم قدر آهي. جيڪڏهن اهم ڄاڻ آهي، گهربل ڊيٽا تائين رسائي تمام تيز آهي. تنهن ڪري، اندراج ۽ ڳولا آپريشن تيزيء سان آزاديء سان ڊيٽا جي سائيز تي آهن. Hash Table ڊيٽا کي رکڻ لاءِ هڪ صف تي مشتمل آهي ۽ هڪ انڊيڪس جي پيداوار لاءِ هيشنگ جتي هڪ عنصر واقع هجڻ گهرجي. hashing ڇا آهي؟ اهو هڪ قاعدو آهي جيڪو نقشي کي اکرن جي هڪ سيٽ ۾ نقشي (ڪوڊ). عام طور تي ان قسم جو فنڪشن ڊيٽا جي وڏي ٽڪري کي ننڍي انٽيجر ويل ۾ بدلائي ٿو. هاش جا ڪم مختلف ٿي سگهن ٿا، پر اهي سڀ ڪجهه خاص ملڪيت جمع ڪرائين ٿا:
  • هڪ خاص اعتراض کي خاص هيش ڪوڊ آهي.
  • ٻه برابر شيون ساڳيا هيش ڪوڊ آهن. ريورس سچ نه آهي.
  • جيڪڏهن ٻه هيش ڪوڊ مختلف آهن، شيون ضرور برابر نه آهن.
  • مختلف شيون شايد ساڳيا هيش ڪوڊ هجن. هي تمام نادر واقعو ٽڪراء کي سڏيندو آهي. سٺو هيش فنڪشن ٽڪرن جي امڪان کي گھٽائي ٿو.
هڪ اعتراض تي Hash فنڪشن کي لاڳو ڪرڻ جو نتيجو hashCode ڪال ڪري ٿو .

جاوا ۾ Hashtable

هيش ٽيبل ڪلاس هيش ٽيبل ڊيٽا جي جوڙجڪ جو عمل آهي. هي مجموعو جاوا ڪليڪشن فريم ورڪ کان اڳ ٺاهيو ويو هو، پر بعد ۾ ان ۾ شامل ڪيو ويو. سڀني "ابتدائي" مجموعن وانگر (جاوا 1.0 کان)، هڪ هيش ٽيبل هم وقت سازي ڪئي وئي آهي (تقريبا سڀني طريقن سان هم وقت سازي جي طور تي نشان لڳل آهن). هن عنصر جي ڪري، هيش ٽيبل اهم ڪارڪردگي مسئلا آهن. تنهن ڪري، جاوا 1.2 کان شروع ٿي، اڪثر ڪيسن ۾ اهو تجويز ڪيو ويو آهي ته نقشي جي انٽرفيس جي ٻين عملن کي استعمال ڪرڻ جي ڪري انهن جي هم وقت سازي جي کوٽ جي ڪري. عام طور تي HashMap سڀ کان وڌيڪ مناسب متبادل آهي. تنهن ڪري ڪلاس Hashtable<K,V> ڪنجين ۽ قدرن تي مشتمل آهي. هي هيشنگ جي اصول تي ڪنجيون محفوظ ڪري ٿو. اهم-قدر جوڙو "بالٽ" ۾ ذخيرو ٿيل آهن. بالٽ گڏجي هڪ "ٽيبل" ٺاهيندا آهن، هڪ قسم جي اندروني صف. Hashtable هڪ بالٽ جو تعين ڪرڻ لاءِ ڪيئي جو هيش ڪوڊ استعمال ڪري ٿو جتي ڪي/قدر جوڙو نقشو ڪرڻ گهرجي. Hash فنڪشن کي اجازت ڏئي ٿو بالٽ جي جڳھ کي Key جي hashcode مان. هي فنڪشن هڪ اعتراض لاء هڪ عددي نمبر ڏئي ٿو. جيئن اسان مٿي چيو آهي ته ٻه برابر شيون ساڳيا هيش ڪوڊ آهن، جڏهن ته ٻه غير برابر شيون هميشه مختلف هيش ڪوڊ نه هجن. مختلف شيون، هڪ hashtable ۾ رکي هڪ ئي hash ڪوڊ ٿي سگهي ٿو. ھن مسئلي کي حل ڪرڻ لاءِ (تصادم) لسٽن جي صف کي استعمال ڪيو ويندو آھي hashtable. ھڪڙي بالٽ تي ميپ ٿيل جوڙو ھڪڙي فهرست ۾ ذخيرو ٿيل آھن ۽ ھن لسٽ جو حوالو صف انڊيڪس ۾ ذخيرو ٿيل آھي.

Hashtable Java Constructors

  • Hashtable() ، ڊفالٽ ٺاھيندڙ. اهو هڪ خالي هيش ٽيبل ٺاهي ٿو. (ڊفالٽ شروعاتي گنجائش = 11، لوڊ فيڪٽر = 0.75).
  • Hashtable (int size) هڪ مخصوص سائيز جي هيش ٽيبل ٺاهي ٿو.
  • Hashtable (int size, float fillRatio) مخصوص سائيز ۽ ڀرڻ جي تناسب جي هيش ٽيبل ٺاهي ٿو.
  • Hashtable(Map m) ھڪ ھئش ٽيبل ٺاھي ٿو ساڳين ميپنگن سان جيئن ڏنل نقشو.

هيشٽيبل اعلان

Hashtable Java ڪلاس نقشي ، ڪلون ايبل ۽ سيريلائيبل انٽرفيس کي لاڳو ڪري ٿو . اهو ڊڪشنري ڪلاس کي وڌايو.
Hashtable.java
public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable
K نقشي طرفان برقرار رکيل چابين جو قسم آھي. V نقشي ڪيل قدرن جو قسم آھي. مثال:
Hashtable<Student, Integer> myHTable = new Hashtable<>();

هيش ٽيبل جاوا ڪيئن درآمد ڪجي

Java Hashtable java.util پيڪيج جي اندر آهي. تنهن ڪري درآمد java.util.Hashtable استعمال ڪريو ؛ توهان جي ڪوڊ ۾. عام طور تي توهان هن بابت توهان جي IDE مان هڪ اشارو حاصل ڪندا.

Hashtable مکيه آپريشن

Hashtable جو مکيه عمل آهي حاصل ڪرڻ، گڏ ڪرڻ ۾ داخل ڪرڻ ۽ اتان کان هٽائڻ. هتي اهي ٽي آپريشن آهن:
  • Object get(Object key) ان شئي جي قيمت واپس ڪري ٿي جيڪا مخصوص ڪيل ڪيئي آهي. واپسي null جيڪڏھن ڪا اھڙي ڪيڏي نه ملي.
  • Object put(Object key، Object value) نقشي ۾ مخصوص ڪيل ڪي کي مخصوص ويل تائين پهچائي ٿو. نڪي ڪيڏي ۽ نڪي قدر null ٿي سگهي ٿو.
  • اعتراض کي هٽايو (آبجڪٽ ڪي) هٽائيبل مان داخلا (ڪي ۽ لاڳاپيل قدر) کي هٽائي ٿو.
ٻيا اهم عمل:
  • int size() هيش ٽيبل ۾ داخلائن جي مقدار کي واپس ڪري ٿو.
  • boolean تي مشتمل آهي (آبجڪٽ ويليو) چيڪ ڪري ٿو جيڪڏهن مخصوص ويل هيش ٽيبل ۾ آهي. جيڪڏهن ائين آهي، طريقو صحيح موٽائي ٿو، ٻي صورت ۾ غلط.
  • boolean containsValue(Object value) چيڪ ڪري ٿو جيڪڏهن مخصوص ويل هيش ٽيبل ۾ آهي. جيڪڏهن ائين آهي، طريقو صحيح موٽائي ٿو، ٻي صورت ۾ غلط.
  • void clear() هٽائيبل مان سڀني داخلائن کي هٽائي ٿو.
  • boolean containsKey (Object key) صحيح موٽائي ٿو جيڪڏهن مخصوص ڪيل ڪي هيش ٽيبل ۾ موجود آهي، ٻي صورت ۾ غلط موٽايو.
  • boolean isEmpty() صحيح موٽائي ٿو جيڪڏهن هيش ٽيبل خالي آهي يا غلط آهي جيڪڏهن ان ۾ گهٽ ۾ گهٽ هڪ ڪي شامل آهي.
  • void rehash() hashtable جي سائيز کي وڌائي ٿو ۽ ان جي سڀني ڪنجين کي ريش ڪري ٿو.

هش ٽيبل تي عمل درآمد، جاوا ڪوڊ:

اچو ته هڪ شاگرد ڪلاس ٺاهيون:
import java.util.Date;
public class Student {
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}
هتي جاوا Hashtable مثال آهي. اچو ته شاگردن جي ڪلاس جا ٻه Objects hashtable ۾ رکون، پوء ڪجھ کي هٽائي ڇڏيو ۽ ڪجھ پيٽرولر چيڪ ڪريو.
public class HashTableExample {
   public static void main(String[] args) {

       Hashtable<Student, Integer> myHTable = new Hashtable<>();
       Student sarah1 = new Student("Sarah","Connor", "Jane", null);
       Student john = new Student("John","Connor", "Kyle", new Date(1985, 02-1, 28)); // date not exists
       myHTable.put(john,1);
       myHTable.put(sarah1,0);
       System.out.println(myHTable.get(john));
       System.out.println(myHTable.isEmpty());
       System.out.println(myHTable.size());
       System.out.println(myHTable.contains(1));
       myHTable.remove(john);
       System.out.println(myHTable.contains(0));
       System.out.println(myHTable.contains(1));
       System.out.println(myHTable.containsKey(sarah1));
   }
}
هلندڙ پروگرام جو نتيجو آهي:
1
false
2
true
true
false
true

HashMap بمقابله Hashtable

  • Hashtable جاوا ۾ HashMap وانگر آهي. سڀ کان اهم فرق اهو آهي ته Hashtable هم وقت سازي ڪئي وئي آهي جڏهن ته HashMap نه آهي. تنهن ڪري، Hashtable هم وقت سازي جي ڪري HashMap کان سست آهي.
  • هم وقت سازي جي مسئلي کان سواء، Hashtable null کي قدر يا ڪيچ جي طور تي استعمال ڪرڻ جي اجازت نٿو ڏئي. HashMap اجازت ڏئي ٿو ھڪڙي null Key ۽ گھڻن نيل قدرن جي.
  • Hashtable ڊڪشنري ڪلاس کي ورثي ۾ ڏئي ٿو جڏهن ته HashMap AbstractMap ڪلاس کي ورثي ۾ ملي ٿو.
  • HashMap Iterator ذريعي گذريو ويو آهي. Hashtable کي نه رڳو Iterator ذريعي، پر ڳڻپيوڪر طرفان پڻ منتقل ڪري سگھجي ٿو.

جاوا هيش ٽيبل مثال (Hashtable vs HashMap null key)

ھتي ھڪڙو ٽڪرا ڪوڊ آھي ھڪڙي نموني کي ڏيکارڻ لاءِ جيڪو HashMap ۽ Hashtable ۾ ڪيئي ۽ قدر طور استعمال ڪيو ويو آھي
// Null key Java hashtable example and hashmap example

try{
      System.out.println("Hashtable");
      Hashtable hashTable = new Hashtable();
      hashTable.put(null, new Object());
    }catch(Exception ex){
      ex.printStackTrace();
    }
    System.out.println("HashMap");
    HashMap hashMap = new HashMap();
    hashMap.put(null, new Object());
    System.out.println("as you see no exceptions with null key in HashMap");
  }
پروگرام هلائڻ جو نتيجو جنهن ۾ هي ٽڪرو شامل آهي:

java.lang.NullPointerException
	at java.base/java.util.Hashtable.put(Hashtable.java:480)
	at Character.main(Character.java:58)
HashMap
as you see no exceptions with null key in HashMap

نتيجو

توهان حقيقت ۾ اڪثر استعمال نه ڪندا Hashtable حقيقي منصوبن ۾، پر پراڻن منصوبن ۾ هن ڊيٽا جي جوڙجڪ کي پورو ڪرڻ آسان آهي. بهرحال، اهو سمجهڻ ضروري آهي ته جاوا وٽ ڊيٽا جي جوڙجڪ ڪهڙي آهي ۽ اهي ڪيئن ڪم ڪن ٿيون، گهٽ ۾ گهٽ توهان جي انٽرويوز لاءِ. عام طور تي HashMap شيون استعمال ڪيون وينديون آهن Hashtable جي بدران انهن جي هڪجهڙائي جي ڪري. HashMap وڌيڪ اثرائتو آهي (اها هم وقت سازي نه ڪئي وئي آهي) ۽ هڪ اهم طور تي null ٿي سگهي ٿو.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION