Tuesday, December 20, 2011

Java Map

Java Map

ဒီေန႕ Oracle က နမူနာျပထားတဲ႔ Map ကို ခဏေလာက္ျပန္ၾကည္႕ရင္းသေဘာက်တာနဲ႕ ဒီမွာတင္ထားလိုက္တယ္။
import java.util.*;
public class PhoneList {
   public static void main(String args[]) {
     // Create map - maintain insertion order
     Map map = new LinkedHashMap();

သူ႕ရဲ႕ comment ေတြကိုၾကည္႕ရင္ကို နားလည္ႏိုင္ပါတယ္။ 
Insert လုပ္တဲ႔အခါ ပထမဆံုး ထည္႕တဲ႔ record က ပထမ ေနရာမွာရိွေနခ်င္တယ္ဆိုရင္၊
 တစ္နည္းအားျဖင္႔ order ကို မွတ္ထားခ်င္တယ္ဆိုရင္
LinkedHasMap ကိုသံုးရပါတယ္။ ဒါမ်ိဳးေတြက SCJP မွာေမးတတ္ပါတယ္။

// Add members
     map.put("George", "202-456-1111");
     map.put("Bill", "212-348-8882");
     map.put("Hillary", "202-224-4451");
     map.put("Elvis", "901-332-3322");
     map.put("Jimmy", "229-924-6935");
 
ဒီေနရာမွာ map ထဲကို id နဲ႕ value ထည္႕ပါတယ္။ ဒီေနရာမွာ Phone List လုပ္ေနတာဆိုေတာ႔ လူနာမည္နဲ႕
ဖံုးနံပါတ္အတြဲလုိက္ေလးေတြထည္႕ပါတယ္။ဒါေတြကို Array နဲ႕လုပ္လည္းရပါတယ္။
Map ရဲ႕အားသာခ်က္ေတြကေတာ႔ အမ်ားၾကီးရိွပါတယ္။ အထူးသျဖင္႔ Object ေတြကို 2D, 3D လုပ္တဲ႔အခါလြယ္ပါတယ္။
map တစ္ခုထဲမွာ map ေတြထပ္ထည္႕ခ်င္လည္းရပါတယ္။ dimension မ်ားလာရင္ ပိုျပီး လြယ္ကူေစပါတယ္။
Objects ေတြကိုလည္း အဆင္ေျပေျပသံုးႏုိင္ပါတယ္။ 
http://en.wikipedia.org/wiki/Hash_table Hash table ေတြရဲ႕ structure နဲ႕
 pros and cons ေတြကို အဲဒီမွာဖတ္လို႕လည္းရပါတယ္။
တစ္ခါတစ္ေလၾကရင္ ကိုယ္အဆင္ေျပတာသံုးေနၾကတာမ်ားပါတယ္။ 
ဘယ္လိုနည္းနဲ႕ျဖစ္ျဖစ္ အဆင္ေျပေအာင္ လုပ္ႏိုင္ၾကရင္ေကာင္းပါတယ္။
 တစ္ခ်ိဳ႕ ေနရာေတြမွာ ပိုျပီးအဆင္ေျပလြယ္ကူတယ္ ဆိုတာကိုသိစရာလိုပါတယ္။

// Print map
     print(map, "Insertion Order:");
Print function တစ္ခုေအာက္မွာေရးထားတာကိုေခၚတာပါပဲ။ အေပၚမွာ LinkedHashMap လုပ္ထားတဲ႔အတြက္
Add လုပ္ထားတဲ႔ order အတိုင္းထြက္လာပါတယ္။

// Convert map to regular
     map = new HashMap(map);

တစ္ခါတစ္ေလၾကရင္ Data ေတြရိွေနရင္ေတာ္ျပီ ပထမဆံုးထည္႕ထားတာ ပထမဆံုးမွာရိွကိုရိွေနရမယ္ဆိုတာမ်ိဳး မလိုခ်င္ဘူးဆိုရင္
HashMap သံုးလို႕ရပါတယ္။ Hashing Order လို႕ေခၚပါတယ္။ သူအဆင္ေျပသလို ထည္႕ထားပါလိမ္႔မယ္။ ျပန္ထုတ္လိုက္ရင္ 
Hash Order အတုိင္းထြက္လာပါမယ္။
ေနာက္ဆံုးမွာျပထားတဲ႔ results ေတြကိုၾကည္႕ရင္ပိုျပီးသေဘာေပါက္ႏုိင္ပါတယ္။
// Print map
     print(map, "Hashing Order:");

     // Convert map to sorted
     map = new TreeMap(map);


TreeMap လုပ္လုိက္ရင္ sort လုပ္ျပီးသားရပါမယ္။ ကိုယ္႔ဘာသာကို sorting စီေနဖုိ႕မလုိပါဘူး။

// Print map print(map, "Sorted"); } private static void print(Map map, String message) { System.out.println(message); Set entries = map.entrySet(); Iterator iterator = entries.iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry)iterator.next(); System.out.println(entry.getKey() + " : " + entry.getValue()); } System.out.println(); } }


Your result should look something like the following:
Insertion Order:
George : 202-456-1111
Bill : 212-348-8882
Hillary : 202-224-4451
Elvis : 901-332-3322
Jimmy : 229-924-6935

Hashing Order:
Hillary : 202-224-4451
George : 202-456-1111
Bill : 212-348-8882
Jimmy : 229-924-6935
Elvis : 901-332-3322

Sorted
Bill : 212-348-8882
Elvis : 901-332-3322
George : 202-456-1111
Hillary : 202-224-4451
Jimmy : 229-924-6935

Regards,
Zero

ref:
http://java.sun.com/new2java/supplements/solutions/July02.html
http://en.wikipedia.org/wiki/Hash_table

No comments: