时间来不及 随便写点 Map的两种取值(键值 和 值)方法 但是取出的值是无序的怎么办?

首先  我想到了之前用过的比较器 和  

两种方法分别是 :

法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  这样就默认为自然排序了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值