تجنب NullPointerException في Hashtable بلغة الجافا
في الكود الذي قدمته، تحدث استثناء NullPointerException عند استخدام الطريقة get
للكائن من نوع Hashtable. الشيء الذي يمكن أن يكون سببًا لحدوث هذا الاستثناء هو محاولة الوصول إلى قيمة لمفتاح غير موجود في الجدول.
عند التحقق من الكود الذي قدمته، يتضح أنك تقوم بتحديث Hashtable باستخدام القيم الحالية لكل مفتاح. ومع ذلك، قد يكون السبب في حدوث NullPointerException هو أن مفتاح معين غير موجود في الجدول عند أول استدعاء للدالة get
، وهذا يحدث قبل أن يتم إضافة أي قيم إلى الجدول.
-
تحميل عوامل C++ مع أعضاء ثابتة13/03/2024
-
Textarea Dynamic Height with React25/03/2024
لتجنب هذا الخطأ، يفضل التحقق من وجود المفتاح في الجدول قبل استخدام الدالة get
. يمكنك تحقق من وجود المفتاح باستخدام الدالة containsKey
كما يلي:
javaList l = new ArrayList();
// إضافة القيم إلى l
Hashtable h = new Hashtable();
for (int i = 0; i < l.size(); i++) {
String item = l.get(i);
// التحقق من وجود المفتاح في الجدول
if (h.containsKey(item)) {
int value = h.get(item);
h.put(item, ++value);
} else {
// إذا كان المفتاح غير موجود، قم بإضافته إلى الجدول مع قيمة افتراضية
h.put(item, 1);
}
}
باستخدام هذا الأسلوب، يمكنك تجنب استثناء NullPointerException الناتج عن محاولة الوصول إلى مفتاح غير موجود في الجدول.
المزيد من المعلومات
إن استخدامك لكائن Hashtable
يظهر أنك تفضل استخدام هذه الهيكلة البيانية لتخزين الأزواج Hashtable
هو جزء من واجهة برمجة التطبيقات في لغة الجافا، وهو يقدم هيكل بيانات يستخدم لتخزين البيانات بطريقة يمكن البحث فيها بسرعة.
في الكود الخاص بك، قمت بتكوين Hashtable
باستخدام النوع String
كمفتاح والنوع Integer
كقيمة. ولكن يبدو أن هناك استثناءً من نوع NullPointerException
يحدث عند محاولة الوصول إلى القيمة المرتبطة بمفتاح معين باستخدام الدالة get
.
الحل السابق تناول كيفية التحقق من وجود المفتاح باستخدام containsKey
قبل استخدام الدالة get
. ومع ذلك، يمكن أيضًا أن تكون هناك طرق أخرى لتحسين وتبسيط الكود.
على سبيل المثال، يمكنك استخدام حلقة for-each لتبسيط الكود وجعله أكثر قراءة. هنا هو مثال:
javaList stringList = new ArrayList<>();
// قم بإضافة القيم إلى stringList
Hashtable hashtable = new Hashtable<>();
for (String item : stringList) {
// التحقق من وجود المفتاح في الجدول
if (hashtable.containsKey(item)) {
int value = hashtable.get(item);
hashtable.put(item, value + 1);
} else {
// إذا كان المفتاح غير موجود، قم بإضافته إلى الجدول مع قيمة افتراضية
hashtable.put(item, 1);
}
}
هذا الكود يستخدم حلقة for-each للتنقل عبر عناصر stringList
بشكل أكثر أناقة، ويقوم بتحديث قيم المفاتيح في hashtable
بناءً على وجود المفتاح أو عدم وجوده.
بهذا، يمكنك تجنب استثناءات NullPointerException وضمان أن الكود يعمل بشكل صحيح على جميع البيانات.