Các cách iterate map trong Java
Bài đăng này đã không được cập nhật trong 5 năm
Thông thường, có 5 cách để iterate một Map trong Java. Trong bài viết này, chúng ta hãy cùng tìm hiểu về 5 phương pháp ấy với những điểm mạnh và điểm yếu của từng phương pháp. Trước hết, chúng ta cần phải làm rõ rằng Map trong Java không thể được iterate thông qua iterator, vì Map không kế thừa Collection. Ngoài ra, chúng ta còn phải tìm hiểu thêm một chút về interface Map.Entry<K, V> . Do tất cả các loại map trong Java implement interface Map, chúng ta có thể sử dụng tất cả những cách làm dưới đây cho các loại map ấy (HashMap, TreeMap, LinkedHashMap, Hashtable, v.v...)
1. Iterate Map.entrySet () bằng vòng lặp For-Each:
Phương thức Map.entrySet () trả về một collection view (Set <Map.Entry <K, V >>) của các entry tồn tại trong map. Vì vậy chúng ta có thể iterate các cặp key-value bằng hai phương phức getKey() và getValue() trong Map.Entry<K, V>. Cách làm này là cách phổ biến nhất và là cách tối ưu nếu bạn cần sử dụng cả key và value của map trong vòng lặp.
//Chuong trinh Java vi du cho cach iterate
// cac entry Map.entrySet() bang vong lap For-Each
import java.util.Map;
import java.util.HashMap;
class IterationDemo
{
public static void main(String[] arg)
{
Map<String,String> gfg = new HashMap<String,String>();
// Nhap cap name/url
gfg.put("GFG", "geeksforgeeks.org");
gfg.put("Practice", "practice.geeksforgeeks.org");
gfg.put("Code", "code.geeksforgeeks.org");
gfg.put("Quiz", "quiz.geeksforgeeks.org");
// dung for-each de iterate Map.entrySet()
for (Map.Entry<String,String> entry : gfg.entrySet())
System.out.println("Key = " + entry.getKey() +
", Value = " + entry.getValue());
}
}
Output: Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org
2. Iterate key hoặc value thông qua phương thức keySet() và values()
Phương thức Map.keySet() trả về một set view của các key tồn tại trong map, còn Map.values() method trả về một collection view các values tồn tại trong map. Vì vậy, nếu bạn chỉ cần sử dụng hoặc key, hoặc value trong map thì bạn có thể iterate bằng keySet() hoặc values(). Xem ví dụ ở chương trình Java dưới đây.
//Chuong trinh Java vi du cho cach iterate map
// su dung keySet() va values()
import java.util.Map;
import java.util.HashMap;
class IterationDemo
{
public static void main(String[] arg)
{
Map<String,String> gfg = new HashMap<String,String>();
// Nhap cap name/url
gfg.put("GFG", "geeksforgeeks.org");
gfg.put("Practice", "practice.geeksforgeeks.org");
gfg.put("Code", "code.geeksforgeeks.org");
gfg.put("Quiz", "quiz.geeksforgeeks.org");
// using keySet() for iteration over keys
for (String name : gfg.keySet())
System.out.println("key: " + name);
// using values() for iteration over keys
for (String url : gfg.values())
System.out.println("value: " + url);
}
}
Output:
key: Quiz
key: Practice
key: GFG
key: Code
value: quiz.geeksforgeeks.org
value: practice.geeksforgeeks.org
value: geeksforgeeks.org
value: code.geeksforgeeks.org
3. Iterate bằng iterator Map.Entry<K, V>
Phương pháp này có phần giống với phương pháp đầu tiên. Trong phương thức đầu tiên, chúng ta sử dụng vòng lặp for-each với Map.Entry <K, V>, nhưng trong phương pháp này chúng ta sử dụng iterator. Sử dụng iterator với Map.Entry <K, V> có lợi ích là chúng ta có thể xóa các entry trong map trong vòng lặp bằng cách gọi phương thức iterator.remove (). Ví dụ:
//Chuong trinh Java vi du cho cach iterate map
// bang iterator
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
class IterationDemo
{
public static void main(String[] arg)
{
Map<String,String> gfg = new HashMap<String,String>();
// Nhap cap name/url
gfg.put("GFG", "geeksforgeeks.org");
gfg.put("Practice", "practice.geeksforgeeks.org");
gfg.put("Code", "code.geeksforgeeks.org");
gfg.put("Quiz", "quiz.geeksforgeeks.org");
// Dung iterator
Iterator<Map.Entry<String, String>> itr = gfg.entrySet().iterator();
while(itr.hasNext())
{
Map.Entry<String, String> entry = itr.next();
System.out.println("Key = " + entry.getKey() +
", Value = " + entry.getValue());
}
}
}
Output :
Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org
4. Using forEach(action) method :
Trong Java 8, bạn có thể iterate map bằng phương thức Map.forEach(action) và sử dụng lambda expression. Phương pháp này rất gọn code và nhanh.
//Chuong trinh Java vi du cho cach iterate map
// bang phuong thuc forEach(action)
import java.util.Map;
import java.util.HashMap;
class IterationDemo
{
public static void main(String[] arg)
{
Map<String,String> gfg = new HashMap<String,String>();
// Nhap cap name/url
gfg.put("GFG", "geeksforgeeks.org");
gfg.put("Practice", "practice.geeksforgeeks.org");
gfg.put("Code", "code.geeksforgeeks.org");
gfg.put("Quiz", "quiz.geeksforgeeks.org");
// forEach(action) method to iterate map
gfg.forEach((k,v) -> System.out.println("Key = "
+ k + ", Value = " + v));
}
}
Output :
Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org
5. Iterate key và tìm value (không hiệu quả)
Ở phương pháp này trước tiên chúng ta lặp các key (sử dụng phương thức Map.keySet ()) và sau đó tìm kiếm value (sử dụng phương thức Map.get (key)) cho mỗi key. Phương pháp này không được sử dụng trong thực tế vì khá chậm và không hiệu quả vì việc lấy value của một key có thể khá tốn thời gian.
//Chuong trinh Java vi du cho cach iterate map
// bang key va tim value
import java.util.Map;
import java.util.HashMap;
class IterationDemo
{
public static void main(String[] arg)
{
Map<String,String> gfg = new HashMap<String,String>();
// enter name/url pair
gfg.put("GFG", "geeksforgeeks.org");
gfg.put("Practice", "practice.geeksforgeeks.org");
gfg.put("Code", "code.geeksforgeeks.org");
gfg.put("Quiz", "quiz.geeksforgeeks.org");
// Chay vong lap key
for (String name : gfg.keySet())
{
// Tim gia tri
String url = gfg.get(name);
System.out.println("Key = " + name + ", Value = " + url);
}
}
}
Output :
Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org
Nguồn: geeksforgeeks
All rights reserved