30/09/2018, 23:39

Lỗi và Thắc mắc về HashMap trong java

Mình không hiểu tại sao lại có lỗi(Phần gần khu ghi chú) và cũng không hiểu cách hiển thị ở hàm Display.Mong ai đó giải thích giùm vs :))

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;

public class DoctorHash {
	HashMap lishHash = new HashMap();
	Scanner input = new Scanner(System.in);
	public void AddDoctor(){
		System.out.println("Nhap vao ten bac sy: ");
		String name = input.nextLine();
		System.out.println("Cong viec: ");
		String work= input.nextLine();
		System.out.println("Ma: ");
		int code = Integer.parseInt(input.nextLine());
		System.out.println("So gio lam: ");
		int hours = Integer.parseInt(input.nextLine());
		DoctorDetails dt = new DoctorDetails(name, work, code, hours);
		lishHash.put(code, name);
	}
	public void SearchDoctor(){
		System.out.println("Nhap ma: ");
		int search = Integer.parseInt(input.nextLine());
		if(lishHash.containsKey(search)){
			System.out.println("Bac sy can tim: "+lishHash.get(search));
		}
	}
	public void DisplayAll(){
		System.out.println("Danh sach: ");
//		Set set = lishHash.keySet();//keySet():return the set in this map
//		//Collection set = lishHash.values();
//		Iterator iterator = set.iterator();	//iterator():Trả về một đối tượng Iterator  
//											//cho Collection mà có thể được sử 
//											//dụng để thu nhận một đối tượng
//		int i = 1;
//		while(iterator.hasNext()){// làm tnt để hiển thị dc tất cả các thông tin ve doctoc
//			System.out.println(" "+i+" "+lishHash.get(iterator.next()));
//			i++;// next():Trả về phần tử kế tiếp. Ném NoSuchElementException 
//				//nếu không có một phần tử kế tiếp
//		}
		
		/*Cach khac:
		 * Use EntrySet: bị lỗi:can not convert from element type Object to Map.Entry<Integer,String>
		 * */
		for(Map.Entry<Integer, String> entry : lishHash.entrySet()){
			System.out.println(entry.getKey()+": "+entry.getValue());
			// Error: remove();
		}
		/*Cách khac:
		 * Use:keySet va for(): lại lỗi như cách trên>> why?
		 * */
//		for(Integer key:lishHash.keySet()){
//			System.out.println(key+"::"lishHash.get(key));
//			//Error:remove();
//		}
		
		/*Cách khác:
		 * use:Iterator: ko lỗi
		 * */
		
//		Iterator<Map.Entry<Integer,String>> iterator = lishHash.entrySet().iterator();
//		while(iterator.hasNext()){
//			Map.Entry<Integer, String> entry =iterator.next();
//			System.out.println(entry.getKey()+": "+entry.getValue());
//			// có thể su dung remove();
//		}
	}
}
cdxf viết 01:51 ngày 01/10/2018

Chuyển từ
HashMap lishHash = new HashMap();
sang
Map<Integer, String> lishHash = new HashMap();
Bạn có 2 lỗi ở đây:

  1. HashMap thì tốt nhất nên dùng Generics chứ không thể để HashMap khơi khơi như vậy đc, nếu dùng khơi khơi thì lúc lấy entrySet phải cast nó lại (không khiến khích vì sẽ gây ra unchecked cast).
  2. Bạn nên “program to interfaces, not implementations”, nên chuyển HashMap thành Map như bên trên (vì sao bạn tự tìm hiểu nhe)
Bài liên quan
0