Java and HashMap/Hashtable       | 
   
 
			  
			  
                Java HashMap/Hashtable บทความนี้จะขอธิบายเกี่ยวกับ HashMap และ Hashtable บนภาษา Java  ที่อยู่ใน Library ของ java.util จะเป็น Collection ที่จะได้ใช้งานกันบ่อย ๆ   เพราะเป็นรูปแบบการจัดเก็บค่าตัวแปร ที่อยู่ในรูปแบบของ Key และ Value ซึ่งจะแตกต่างกับ ArrayList ที่จะมีเพียงแค่ Index ที่ทำหน้าที่เป็นทั้ง Key และ Value  ใน Collection ของ HashMap และ Hashtable สามารถเพิ่มสมาชิกได้ไม่จำกัดนำนวน และไม่ต้องทราบถึงจำนวนขนาดหรือ Size สมาชิกล่วงหน้า คือสามารถเพิ่มได้เรื่อย ๆ จนเพียงพอแต่ความต้องการใช้งาน แต่การจัดเก็บจนมาเกินไปก็จะมีผลต่อ memory และความเร็วในการทำงานเช่นเดียวกัน เพราะฉะนั้นการใช้ตัวแปรเหล่านี้จะต้องใช้ให้เหมาะสม ยิ่งเมื่อต้องการจัดเก็บข้อมูลประเภท Object , Byte หรือพวก Bitmap ก็จะต้องใช้ memory จำนวนมากในการจัดเก็บเช่นเดียวกัน แต่ถ้าเป็นข้อมูลประเภท String หรือ Int(Number) จะสามารถเก็บได้ในประมาณมาก สำหรับรูปแบบการทำงานของ HashMap และ Hashtable นั้นจะคล้ายกันเกือบถึง 95% คือมีรูปแบบ และ method ที่เหมือน ๆ กับ แต่จะมีข้อแตกต่างกันอยู่ 2-3 ชุด เช่น 
 
HashMap จะยอมให้มีค่าว่าง (null) เป็นทั้ง Key และ Value และ HashMap จะเป็นประเภท unsynchronized 
Hashtable จะไม่ยอมให้มีค่าว่าง (null) ที่เป็น Key หรือ Value และจะเป็นประเภท synchronized 
 
ความแตกต่างระหว่า unsynchronized กับ synchronized คือ รูปแบบ unsynchronized จะสามารถเข้าใช้งาน Collection นั้น ๆ ได้พร้อมกันหลาย ๆ  Thread พร้อมกัน เฉพาะฉะนั้นจะสามารถทำงานเร็วกกว่า เหมาะกับข้อมูลที่ไม่ต้องการเปลี่ยนแปลง เพราะถ้ามีการเปลี่ยนแปลงข้อมูลเกิดขึ้นก่อนที่จะทำการ Update ไปยัง Collection การทำงานของ Thread อื่น ๆ ที่กำลังทำอยู่ในขณะเดียวกัน ก็อาจจะได้ข้อมูลที่ไม่ค่อยถูกต้อง ส่วน synchronized เป็นรูปแบบการทำงานที่จะ Lock Collection ที่ถูกเรียกใช้งานอยู่และ Thread ที่จะเข้ามาใช้งานต่อจากนั้นจะต้องรอคิวจนกว่า Thread แรกได้ทำงานเสร็จสิ้นไปแล้ว ซึ่งจะเหมาะกับชุดของข้อมูล ที่มีการเปลี่ยนแปลงบ่อยและต้องการความถูกต้องแม่นย้ำสูง แต่ข้อเสียคือการทำงานก็จะช้าลงไปด้วย  
 
เพราะฉะนั้นการเลือกใช้งานระหว่าง HashMap และ Hashtable  จะต้องเลือกใช้ให้เหมาะสมกับประเภทของชุดข้อมูลด้วย แต่ในหลักการเขียนโปรแกรมทั่ว ๆ ไป HashMap จะเป็นทางเลือกในใช้งานผ่าน Collection ประเภทนี้ซะมากว่า ส่วนเหตุผลได้อธิบายจากความแตกต่างระหว่าง unsynchronized กับ synchronized 
 
(ผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยครับ) 
 
รูปแบบ  HashMap  และ Hashtable 
HashMap<DataType,DataType> map = new HashMap<DataType,DataType>();
Hashtable<DataType,DataType> table = new Hashtable<DataType,DataType>();
  
 
ตัวอย่างการใช้  HashMap  และ Hashtable 
 
- HashMap 
HashMap<String,String> map = new HashMap<String,String>();
map = new HashMap<String, String>();
map.put("MemberID", "1");
map.put("Name", "Weerachai");
map.put("Tel", "0819876107");
 
ตัวอย่างการประกาศตัวแปรแบบ HashMap ซึ่งมี Key และ Value อยู่ 3 รายการ 
 
- HashMap 
Hashtable<String,String> table = new Hashtable<String,String>();
table = new Hashtable<String, String>();
table.put("MemberID", "2");
table.put("Name", "Win");
table.put("Tel", "021978032");
 
ตัวอย่างการประกาศตัวแปรแบบ Hashtable ซึ่งมี Key และ Value อยู่ 3 รายการ 
 
 
ตัวอย่างนับขนาดหรือ Size ของ  HashMap  และ Hashtable 
map.size();
table();
  
 
ตัวอย่าง Loop ค่าของ  HashMap  และ Hashtable 
 
- HashMap 
Iterator<String> Vmap = map.keySet().iterator();
while(Vmap.hasNext()){
	String key = (String)(Vmap.next());  // Key
	String val = map.get(key); // Value
}
map.clear();
 
 
- Hashtable 
Iterator<String> Vtable = table.keySet().iterator();
while(Vtable.hasNext()){
	String key = (String)(Vtable.next());  // Key
	String val = table.get(key); // Value
}
table.clear();
 
 
ตัวอย่างการอ้างถึงตำแหน่งของ  HashMap  และ Hashtable 
map.containsKey("MemberID"); // result =  1
table.containsKey("MemberID"); // result =  2
map.containsValue("0819876107"); // result = Tel
table.containsValue("021978032"); // result = Tel
 
 
Example 1 ตัวอย่างการสร้าง HashMap และการ Loop ค่าจาก HashMap ออกมาแสดง 
 
MyClass.java 
package com.java.myapp;
import java.util.HashMap;
import java.util.Iterator;
public class MyClass {
	public static void main(String[] args) {
	   
		HashMap<String,String> map = new HashMap<String,String>();
		map = new HashMap<String, String>();
		map.put("MemberID", "1");
		map.put("Name", "Weerachai");
		map.put("Tel", "0819876107");
		
		Iterator<String> Vmap = map.keySet().iterator();
		while(Vmap.hasNext()){
			String key = (String)(Vmap.next());  // Key
			String val = map.get(key); // Value
			System.out.println(key + " = " + val); 
		}
		map.clear();
		
	}
	
}
 
Output 
Name = Weerachai 
MemberID = 1 
Tel = 0819876107  
 
 
Example 2 ตัวอย่างการสร้าง Hashtable และการ Loop ค่าจาก Hashtable ออกมาแสดง 
 
MyClass.java 
package com.java.myapp;
import java.util.Hashtable;
import java.util.Iterator;
public class MyClass {
	public static void main(String[] args) {
	   
		Hashtable<String,String> table = new Hashtable<String,String>();
		table = new Hashtable<String, String>();
		table.put("MemberID", "2");
		table.put("Name", "Win");
		table.put("Tel", "021978032");
		Iterator<String> Vtable = table.keySet().iterator();
		while(Vtable.hasNext()){
			String key = (String)(Vtable.next());  // Key
			String val = table.get(key); // Value
			System.out.println(key + " = " + val);
		}
		table.clear();
		
	}
	
}
 
Output 
Name = Win 
MemberID = 2 
Tel = 021978032               
  
              			
			  
								  
			  
  
                          
  | 
           
          
            
			  ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท 
              | 
           
          
 
       
		 
					
        
          
            
                
                   | 
                 
                
                  |   | 
                  By :  | 
                  ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ)  | 
                 
                
                  |   | 
                  Score Rating :  | 
                  
				     				   | 
                    | 
                 
                
                  |   | 
                  Create/Update Date :  | 
                  
                    2013-05-26 11:20:38            /
            2013-08-02 16:01:32 | 
                 
				
				
				                
                  |   | 
                  Download :  | 
                   
				 No files				   | 
                 
				              | 
           
         
		
      
         
           
            
            
              
                | 
               
                   Sponsored Links / Related |  
              | 
         
        
                        | 
          
		  
		   | 
         
         
          |             
		  
	
      
     | 
     
 
 
		  
         | 
		
          
		   
		  
              
      
     |