首先 我想到了之前用过的比较器 和
两种方法分别是 :
法1:通过map的keyset()方法 返回键值的set集合 然后通过键值set集合来遍历 在遍历时 通过 map.get(key)的方式来获取value
法2: 就是我们之前学过的 用 Map.Entry 这个类来实现 简单的说就是通过 将MAP中的映射对应关系 存入这个集合中 说实话 我还没搞清这个为什么无序 (是指存入排列后为什么没按照某种特定的顺序排呢 ? 比如自然顺序) Set<Map.Entry<key,value>> set = map.entrySet();
好了两种方法已经阐述过了 那为什么不按照某种顺序排列呢?
如下:
package day10.collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public class StudentMapDemo {
/**
* @param args
*/
public static void main(String[] args) {
Map<String,Student> ma = new HashMap<String,Student>();
ma.put("1", new Student("徐克宝","男"));
ma.put("2", new Student("王一新","女"));
ma.put("3", new Student("宝宝","女"));
ma.put("4", new Student("baobao","女"));
ma.put("5", new Student("baobao","女"));
// System.out.println(ma);
System.out.println(ma.keySet()); //打印键值(keyset 也就是英文名)的视图
System.out.println(ma.values());//打印 值 (values 也就是student对象)的 视图
//查看是否包含 键值keny
System.out.println("is contains key of keny? "+ma.containsKey("keny"));
// 查看是否包含键值jack
System.out.println("is contains key of jack? "+ma.containsKey("jack"));
//第一种方法打印 通过定义一个Map.Entry 类型的一个set 把map集合转化为set集合 然后再用迭代器取出
method1(ma);
//第二种方法是通过 将map 集合中的键值集合取出 keyset() 返回的是 一个新的set 建立其迭代器 然后每次取出
//键值 最后通过map集合中get(key)的方法 返回value 取出value。。。
method2(ma);
}
public static void method2(Map<String,Student> ma)
{
Set<String> set = ma.keySet();
// Set set = new TreeSet(se);
Iterator <String> it = set.iterator();
while(it.hasNext())
{
String key = it.next();
Student value = ma.get(key);
System.out.println(" \t "+" 键值 英文名:"+key+" 姓名: "+value.getName()+" \t "+" 性别: "+value.getSex());
}
}
public static void method1(Map<String,Student> ma)
{
Set <Map.Entry<String ,Student>> set = ma.entrySet();
Iterator <Map.Entry<String ,Student>> it = set.iterator();
while(it.hasNext())
{
Map.Entry<String, Student> a = it.next();
System.out.println(" \t "+" 键值 英文名:"+a.getKey()+" 姓名: "+a.getValue().getName()+" \t "+" 性别: "+a.getValue().getSex());
}
}
}
百思不得骑姐啊--- 哈哈、、、好久没这么兴奋了、、
后来根据历史经验 想象是不是可以用 比较器 或者让元素自身具备比较性呢?
后来想想 都不可行 这是因为 无论是 keyset 还是 entrySet 返回来时的都是已经设计好的一个set对象 是无法操作它的
所以这个时候是不是应该自己定义一个新的类型呢》?
我目前只做到了第一步的 将keyset中的内容进行排序
将keyset中返回的set集合进行包装 为Treeset 这样就默认为自然排序了