Map是一個集合的接口,是key-value相映射的集合接口,集合遍歷的話,需要通過Iterator迭代器來進行。
Iterator是什么東西:
java.util包下的一個接口:
對 collection 進行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器與枚舉有兩點不同:
迭代器允許調用者利用定義良好的語義在迭代期間從迭代器所指向的 collection 移除元素。
方法名稱得到了改進
方法摘要 | |
---|---|
boolean |
hasNext() 如果仍有元素可以迭代,則返回 true。 |
E |
next() 返回迭代的下一個元素。 |
void |
remove() 從迭代器指向的 collection 中移除迭代器返回的最后一個元素(可選操作)。 |
1、來一個簡單的例子吧:
摘抄自別的網站:寫的非常清楚
http://www.cnblogs.com/azhqiang/p/4110333.html
Map讀取鍵值對,Java遍歷Map的兩種實現方法
第一種方法是根據map的keyset()方法來獲取key的set集合,然后遍歷map取得value的值
import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class HashMapTest2 { public static void main(String[] args) { HashMap map = new HashMap(); map.put("a","aaaa"); map.put("b","bbbb"); map.put("c","cccc"); map.put("d","dddd"); Set set = map.keySet(); for(Iterator iter = set.iterator(); iter.hasNext();) { String key = (String)iter.next(); String value = (String)map.get(key); System.out.println(key+"===="+value); } } }
第二種方式是使用Map.Entry來獲取:
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HashMapTest4 { public static void main(String[] args) { HashMap map = new HashMap(); map.put("a","aa"); map.put("b","bb"); map.put("c","cc"); map.put("d","dd"); Set set = map.entrySet(); for(Iterator iter = set.iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry)iter.next(); String key = (String)entry.getKey(); String value = (String)entry.getValue(); System.out.println(key +" :" + value); } } }
獲取map的大小:
public static void main(String[] args) { Map map = new HashMap(); map.put("apple", "新鮮的蘋果"); //向列表中添加數據 map.put("computer", "配置優良的計算機"); //向列表中添加數據 map.put("book", "堆積成山的圖書"); //向列表中添加數據 System.out.println("Map集合大小為:"+map.size()); }
我自己試了,並對其中的每一步進行了詳解
基礎類:
public class Student { //private int num;//身份證號 private String name; private String sex; public Student() { super(); // TODO Auto-generated constructor stub } public Student(String name, String sex) { super(); this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }
測試集合類:
public class Test3 { public static void main(String[] args) { //創建學員 Student stu1=new Student("李明", "男"); Student stu2=new Student("張麗", "女"); //創建保存鍵-值的集合對象 Map students=new HashMap(); //把英文名字與學員對象按鍵-值的方式 存儲在HashMap中 students.put("Jack", stu1); students.put("danae", stu2); /*************第一種方法********************* //返回此映射中包含的鍵的 Set 視圖 Set set= students.keySet();//keyset返回一個set的集合 //建一個set的迭代器 Iterator it=set.iterator();//創建鍵值的迭代器 //hasNext()如果仍有元素可以迭代,則返回 true。 while(it.hasNext()){//存在下一個值的時候 //返回迭代的下一個元素 String key=(String) it.next(); Student value=(Student)(students.get(key)); System.out.println(key+"-------"+value.getName()+value.getSex()); } ******************************************************/ Set set=students.entrySet();//返回此映射中包含的映射關系的 Set 視圖。 Iterator it=set.iterator();//建set集合的迭代器 //遍歷集合迭代器 while(it.hasNext()){ /*********** * 映射項(鍵-值對)。Map.entrySet 方法返回映射的 collection 視圖, * 其中的元素屬於此類。獲得映射項引用的唯一 方法是通過此 collection 視圖的迭代器來實現。 * 這些 Map.Entry 對象僅 在迭代期間有效;更確切地講, * 如果在迭代器返回項之后修改了底層映射,則某些映射項的行為是不確定的,除了通過 setValue 在映射項上執行操作之外。 */ Map.Entry entry=(Map.Entry) it.next();//有下一個集合數據 String key=(String) entry.getKey(); //entry.getkey或getvalue返回的是Object類型的數據,所以要強轉,因為我的value值是多個數據,這些數據都是要通過我的student類才能獲取到它的屬性值 Student value=(Student) entry.getValue(); System.out.println(key+"-----------"+value.getName()+value.getSex()); } } }