سؤال

ما هي الطريقة الأكثر مباشرة لإنشاء جدول التجزئة (أو المصفوفة النقابية...) في Java؟لقد أظهر موقع google-fu الخاص بي بضعة أمثلة، ولكن هل هناك طريقة قياسية للقيام بذلك؟

وهل هناك طريقة لملء الجدول بقائمة من أزواج المفاتيح->القيمة دون استدعاء طريقة إضافة بشكل فردي على الكائن لكل زوج؟

هل كانت مفيدة؟

المحلول

Map map = new HashMap();
Hashtable ht = new Hashtable();

يمكن العثور على كلا الفئتين من الحزمة java.util.الفرق بين 2 موضح في ما يلي إدخال الأسئلة الشائعة لـ jGuru.

نصائح أخرى

يمكنك استخدام الأقواس المزدوجة لإعداد البيانات.ما زلت تتصل بـ add أو put، لكنها أقل قبحًا:

private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
    put("foo",      1);
    put("bar",      256);
    put("data",     3);
    put("moredata", 27);
    put("hello",    32);
    put("world",    65536);
 }};

لا تنس أيضًا أن كلاً من Map وHashtable عامان في Java 5 والإصدارات الأحدث (كما هو الحال في أي فئة أخرى في إطار المجموعات).

Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);

Integer one = numbers.get("one");
Assert.assertEquals(1, one);
import java.util.HashMap;

Map map = new HashMap();

ماذا ادموند قال.

أما بالنسبة لعدم الاتصال .أضف طوال الوقت، لا، ليس اصطلاحاً.سيكون هناك العديد من الاختراقات (تخزينها في مصفوفة ثم تكرارها) التي يمكنك القيام بها إذا كنت تريد ذلك حقًا، لكنني لا أوصي بها.

وهل هناك طريقة لملء الجدول بقائمة من أزواج المفاتيح->القيمة دون استدعاء طريقة إضافة بشكل فردي على الكائن لكل زوج؟

إحدى مشكلات سؤالك هي أنك لم تذكر الشكل الذي تكون عليه بياناتك في البداية.إذا كانت قائمة الأزواج الخاصة بك عبارة عن قائمة بكائنات Map.Entry، فسيكون الأمر سهلاً للغاية.

فقط للتخلص من هذا، هناك فئة (ضارة جدًا) تسمى java.util.Properties وهي امتداد لـ Hashtable.إنه يتوقع فقط مفاتيح وقيم السلسلة ويتيح لك تحميل البيانات وتخزينها باستخدام الملفات أو التدفقات.تنسيق الملف الذي يقرأ ويكتب هو كما يلي:

key1=value1
key2=value2

لا أعرف إذا كان هذا هو ما تبحث عنه، ولكن هناك حالات يمكن أن يكون فيها ذلك مفيدًا.

من المهم ملاحظة أن وظيفة التجزئة في Java أقل من المستوى الأمثل.إذا كنت تريد عددًا أقل من الاصطدامات والتخلص شبه الكامل من إعادة التجزئة بسعة تصل إلى 50% تقريبًا، فسأستخدم خوارزمية Buz Hash بوز هاش

السبب وراء ضعف خوارزمية التجزئة في Java هو الأكثر وضوحًا في كيفية تجزئة السلاسل.

"a".hash() أعطيك تمثيل ASCII لـ "a" - 97, ، لذا "b" سيكون 98.الهدف الأساسي من التجزئة هو تعيين رقم تعسفي و"عشوائي قدر الإمكان".

إذا كنت بحاجة إلى جدول تجزئة سريع وقذر، فاستخدمه بكل الوسائل java.util.إذا كنت تبحث عن شيء قوي وقابل للتطوير بشكل أكبر، فسأفكر في تنفيذ شيء خاص بك.

Hashtable<Object, Double> hashTable = new Hashtable<>();

وضع القيم ...

احصل على الحد الأقصى

Optional<Double> optionalMax = hashTable.values().stream().max(Comparator.naturalOrder());

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top