Map集合

集合框架里的Map集合

1.简介Map集合

  • 什么是Map集合
    Map是一种依照键(key)存储元素的容器。
    Map中不能有重复的键(Key),每个键(key)都有一个对应的值(value)。
    一个键(key)和它对应的值构成map集合中的一个元素。
    Map中的元素是两个对象,一个对象作为键,一个对象作为值。键不可以重复,但是值可以重复。

2.Map集合特有的三个方法

  • put()方法
    1,put方法具有增强功能
    2,put方法增加一个原来已经有的键时新键的值会取代原来的值
    3,put方法增加一个原来已经有的键时会返回原来的值

代码如下:

package com.swx.impl;

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
	public static void main(String[] args) {
		Map map=new HashMap<>();
		map.put("小", 200);
		map.put("中", 100);
		map.put("大", 150);
		map.put("小大", 20);
		map.put("大小", 120);
		
		Object obj=map.put("大", 140);//得到原先key的value值
		System.out.println(map);
		System.out.println("原先的value值="+obj);
		
	}

}

运行结果:
在这里插入图片描述

  • entrySet
    由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系
    可以使用它对Map进行遍历,Map不属于Collection接口没有迭代器

代码如下:

package com.swx.impl;

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

import org.apache.jasper.tagplugins.jstl.core.ForEach;

import java.util.Map.Entry;

public class MapDemo {
	public static void main(String[] args) {
		Map<Object, Object> map = new HashMap<>();
		map.put("小", 100);
		map.put("小", 200);
		map.put("中", 100);
		map.put("大", 150);
		map.put("小大", 20);
		map.put("大小", 120);
		
		Set<Entry<Object, Object>> entrySet=map.entrySet();
		for(Entry<Object, Object> entry:entrySet) {
			System.out.println("key:"+entry.getKey() + ",value:"+entry.getValue());
		}
	}

}

运行结果:
在这里插入图片描述

  • keySet
    获取所有键

代码如下:

package com.swx.impl;

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

import org.apache.jasper.tagplugins.jstl.core.ForEach;

import java.util.Map.Entry;





public class MapDemo {
	public static void main(String[] args) {
		Map<Object, Object> map = new HashMap<>();
		map.put("小", 100);
		map.put("小", 200);
		map.put("中", 100);
		map.put("大", 150);
		map.put("小大", 20);
		map.put("大小", 120);
		Set<Object> keySet = map.keySet();
		for (Object key : keySet) {
			System.out.println("key:"+key + ",value:"+map.get(key));
		}	
	}

}

运行结果:
在这里插入图片描述
3.Map的应用

  • 应用一
    1、将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出
    思路:
    a、封装学生类
    b、判重(hashCode/equals)
    c、打印

    2、最后按年龄进行排序
    a、需要让学生类自身具备比较性,实现Comparable接口

    3、需求改变、按姓名进行排序改变的代码是不可取的,我们需要新增个比较器来完成需求

    代码如下:

package com.swx.impl;

import java.util.Comparator;

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

public class HashMapDemo {
public static void main(String[] args) {
	HashMap map=new HashMap<>();
	map.put(new student("张三",20), "beijing");
	map.put(new student("张四",18), "huanan");
	map.put(new student("张吧",46), "anhui");
	map.put(new student("张七",24), "hubei");
	map.put(new student("张一",15), "changsha");
	map.put(new student("张三",20), "beijing");//和第一条数据一样用于验证判重是否重复
	map.put(new student("张张",80), "yunnan");
	
	Set keySet = map.keySet();
	for (Object object : keySet) {
		System.out.println(object);
	}
}
}

class student {//封装学生类
	private String name;
	private int 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;
	}
	public student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public student() {
		super();
	}
	@Override
	public String toString() {
		return "student [name=" + name + ", age=" + age + "]";
	}
	
	@Override
	public int hashCode() {
		return this.name.hashCode()+this.age;
	}
	@Override
	public boolean equals(Object obj) {
		student stu=(student) obj;
		return this.name.equals(stu.name) && this.age ==stu.age;
	}
}


在这里插入图片描述
第一步:去重复成功

package com.swx.impl;

import java.util.Comparator;

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

public class HashMapDemo {
public static void main(String[] args) {
	TreeMap map=new TreeMap<>();
	map.put(new student("张三",20), "beijing");
	map.put(new student("张四",18), "huanan");
	map.put(new student("张吧",46), "anhui");
	map.put(new student("张七",24), "hubei");
	map.put(new student("张一",15), "changsha");
	map.put(new student("张三",20), "beijing");//和第一条数据一样用于验证判重是否重复
	map.put(new student("张张",80), "yunnan");
	
	Set keySet = map.keySet();
	for (Object object : keySet) {
		System.out.println(object);
	}
}
}

class student implements Comparable<student>{
	private String name;
	private int 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;
	}
	public student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public student() {
		super();
	}
	@Override
	public String toString() {
		return "student [name=" + name + ", age=" + age + "]";
	}
	
	@Override
	public int hashCode() {
		return this.name.hashCode()+this.age;
	}
	@Override
	public boolean equals(Object obj) {
		student stu=(student) obj;
		return this.name.equals(stu.name) && this.age ==stu.age;
	}
	
	@Override
	public int compareTo(student o) {
		int num=this.age-o.age;
		if(num == 0) {
			this.name.compareTo(o.name);
		}
		return num;
	}
	
}

在这里插入图片描述
第二步:年龄从小到大排序

  • 应用二(统计字符串中的字符出现的次数)

代码如下:

package com.swx.impl;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 *  统计字符串中出现的次数
 *  sjfjsfhjshfjshfjsfhjshfjks
 *
 */
public class Tree {
   public static void main(String[] args) {
	String str="asdfghjklkjhgfdsaasdfghjkkhgfdszxcvbnmbcxwertyufsfsdg";
	// 把字符串变成数组
	char [] b=str.toCharArray();
	Map<Character, Integer> map=new HashMap<>();
	for (char c : b) {
		// 通过key值来 获取value 值
		Integer val=map.get(c);
		if(val == null) {
			  // 之前没出现过
			map.put(c, 1);
		}else {
			map.put(c,++val);
		}
	}
	
	StringBuilder sb=new StringBuilder();
	Set<Entry<Character, Integer>> set=map.entrySet();
	for (Entry<Character, Integer> entry : set) {
		sb.append(entry.getKey()+"("+entry.getValue()+")");
	}
	System.out.println(sb);
}
}

运行结果:
在这里插入图片描述
3.集合框架工具类(Collections、Arrays)
这是一个简单的工具类,列如:二分搜索法/冒泡排序/选择排序/快速排序/希尔排序等等,里面提供了很多便捷 的方法

package com.swx.impl;

import java.util.Arrays;

/**
 * 集合框架工具类(Collections、Arrays)
 * @author Administrator
 *
 */
public class UtilDemo {
public static void main(String[] args) {
	int arr[] = {32,453,654,757};
//	[I@7852e922
	System.out.println(arr);
	System.out.println(Arrays.toString(arr));
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值