الدرس 10 من 10
القوائم والخرائط
- 16 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
ArrayList و HashMap: عدّ وتجميع
الشرح
المصفوفة ثابتة الطول، أما ArrayList فقائمة تكبر وتصغر: List<String> loot = new ArrayList<>(); ثم loot.add("sword") وloot.get(0) وloot.size() وloot.contains("bow"). وما بين < > نوع العناصر، ولا يقبل إلا الأصناف: Integer بدل int، وJava تحوّل بينهما وحدها.
وHashMap خريطة تربط مفتاحًا بقيمة: Map<String, Integer> counts = new HashMap<>();. put(k, v) تضع القيمة أو تستبدلها، وget(k) تُرجعها أو null إن غاب المفتاح، وgetOrDefault(k, 0) تُرجع صفرًا بدل null، وعليها يُبنى العدّ: counts.put(w, counts.getOrDefault(w, 0) + 1). وللتجميع computeIfAbsent(key, k -> new ArrayList<>()): تُرجع قائمة المفتاح، وتُنشئها أول مرّة.
وتمرّ على الأزواج بـ for (Map.Entry<String, Integer> e : counts.entrySet())، ومنها e.getKey() وe.getValue(). والفخّ أن HashMap لا تضمن أي ترتيب، لا ترتيب الإدخال ولا الأبجدي. إن أردت المفاتيح مرتّبة فانسخها في new TreeMap<>(counts).
المطلوب
countWords(text) تُرجع كم مرّة وردت كل كلمة، بحروف صغيرة ومهما كثرت المسافات، وخريطة فارغة للنصّ الفارغ. وbyLength(words) تجمع الكلمات في قوائم بحسب طولها، بترتيب ورودها. وmostCommon(counts) تُرجع الكلمة الأكثر تكرارًا، أو "" لخريطة فارغة. ثم اطبع من main كل كلمة في counts وعددها في سطر بالشكل gg: 3، بترتيب أبجدي.
معايير التصحيح
5 معايير- countWords تعدّ كل كلمة
- countWords بحروف صغيرة ولا أثر للمسافات الزائدة
- byLength تجمع الكلمات بطولها وبترتيب ورودها
- mostCommon الأكثر تكرارًا، و "" لخريطة فارغة
- طُبعت الكلمات وأعدادها بترتيب أبجدي