黑马程序员——Java基础——Map集合的学习

android培训java培训期待与您交流!

Map接口的集合特点:

1、Map集合中的元素是以键值对的形式而存在
2、Map集合中的键(key)是唯一的
3、通过键可以查找Map集合中的值
4、Map集合添加元素的方法是put(key,value)

Map集合中常用的方法:

put(K key, V value)  添加的方法
get(Object key) 根据键获取值
size()  获取集合的长度
isEmpty() 判断集合是否为空
containsKey(Object key) 判断集合是否包含指定的键
containsValue(Object value) 判断集合是否包含指定的值
Set<Map.Entry<K,V>> entrySet()  获取的是所有的键值对对象的集合,同个这个方法可以间接遍历Map集合
Set<K> keySet()  返回所有键的Set集合

Map集合的遍历方式:

由于Map集合没有实现Iterrable接口所以不能用增强for循环来遍历Map集合,但是Map集合提供了keySet( )和entrySet()两个方法给我来遍历Map集合。

entrySet():返回获取所有实体Map.Entry的Set集合,然后遍历Set集合获取每一个键和值。

keySet():返回所有键的Set的集合,然后通过get(Object key)方法 获取值。

第一种方式遍历:

1、获取键值对对象的集合
2、遍历键值对对象的集合,获取每一个键值对对象
3、根据键值对对象获取键和值

package map;

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;

public class MapHashMap4 {
	public static void main(String[] args) {
		//创建HashMap集合对象
		HashMap<String,Integer> hm=new HashMap<String,Integer>();
		//添加元素到集合中
		hm.put("张三", 23);
		hm.put("李四", 14);
		hm.put("王五", 36);
		hm.put("赵六", 43);
		hm.put("田七", 29);
		//获取Map集合所有的键值对的Set集合
		Set<Entry<String,Integer>> set= hm.entrySet();
		//增强for遍历Set集合
		for(Entry<String,Integer> entry:set){
			//用Map.Entry<K,V>接口的getKey()获取键
			String key=entry.getKey();
			//用Map.Entry<K,V>接口的getValue()获取值
			int value=entry.getValue();
			System.out.println(key+"----"+value);
		}
	}
}

第二种方式遍历:

1、获取所有键的集合
2、遍历所有键的集合,获取每一个键
3、根据获取到的键获取键对应的值

package map;

import java.util.HashMap;
import java.util.Set;

public class MapHashMap5 {
	public static void main(String[] args) {
		//创建HashMap集合对象
		HashMap<String,Integer> hm=new HashMap<String,Integer>();
		//添加元素到集合中
		hm.put("张三", 23);
		hm.put("李四", 14);
		hm.put("王五", 36);
		hm.put("赵六", 43);
		hm.put("田七", 29);
		//调用keySet()方法,获取所有的键的Set集合
		Set<String> set= hm.keySet();
		for(String key:set){
			int value=hm.get(key);//通过键获取值
			System.out.println(key+"----"+value);
		}
	}
}

Map集合的实现类:

1、HashMap
特点:线程不安全,存取速度快,允许存放null键,null值。
2、Hashtable
特点:线程安全,速度慢,不允许存放null键,null值。该类已经被HashMap替代。
3、TreeMap
特点:线程不安全,基于红黑树实现的,TreeMap集合可以根据自然顺序进行排序也可以提供比较器对象进行排序,具体情况看构造方法。

TreeMap集合的练习:

一、根据自然顺序排序

package map;

import java.util.Set;
import java.util.TreeMap;

public class TreeMapDemo2 {
	public static void main(String[] args) {
		//创建集合对象
		TreeMap<String,Integer> tm=new TreeMap<String,Integer>();
		//添加元素到集合中
		tm.put("zhangsan", 110);
		tm.put("lisi", 120);
		tm.put("tianqi", 115);
		tm.put("chengjiu", 114);
		tm.put("huda", 123);
		
		//获取集合中所有的键
		Set<String> set=tm.keySet();
		//遍历键的集合,获取每一个键
		for(String key:set){
			//根据键获取值
			int value=tm.get(key);
			System.out.println(key+"----"+value);
		}
		
	}
}

程序运行的结果是:

程序运行的结果


二、用比较器排序

package map;

//自定义Student类
public class Student {
	private String name;
	private int age;
	
	
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
}

package map;


import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

//TreeMap测试类
public class TreeMapDemo1 {
	public static void main(String[] args){
		
		//创建TreeMap集合对象,匿名内部类方式在构造方法中传入比较器
		TreeMap<Student,String> tm=new TreeMap<Student,String>(new Comparator<Student>() {
			@Override
			public int compare(Student s1, Student s2) {
				// TODO Auto-generated method stub
				int num1=s2.getAge()-s1.getAge();
				int num2=num1==0?s1.getName().compareTo(s2.getName()):num1;
				return num2;
			}
		});
		//添加元素到集合中
		tm.put(new Student("张三",23), "001");
		tm.put(new Student("李四",26), "003");
		tm.put(new Student("王五",17), "004");
		tm.put(new Student("赵六",41), "005");
		tm.put(new Student("田七",12), "002");
		
		//第一种方式遍历
		Set<Map.Entry<Student,String>> entry= tm.entrySet(); //获取所有键值对对象的集合
		for(Map.Entry<Student,String> me:entry){ //遍历键值对对象集合获取每一个键值对对象
			Student s=me.getKey();//获取每一个键值对对象的键
			String value=me.getValue();//获取每一个键值对对象的值
			System.out.println(s+"-----"+value);
		}
		System.out.println("----------------------------------------------");
		
		//第二中方式遍历
		Set<Student> set= tm.keySet(); //获取所有键的集合
		for(Student key:set){//遍历所有键的集合获取每一个键
			String value=tm.get(key);//根据键获取值
			System.out.println(key+"----"+value);
		}
	}
}

程序运行的结果是:

程序运行结果






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值