欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Map集合

程序员文章站 2022-07-13 09:33:03
...

集合框架里的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);
		
	}

}

运行结果:
Map集合

  • 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());
		}
	}

}

运行结果:
Map集合

  • 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));
		}	
	}

}

运行结果:
Map集合
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;
	}
}


Map集合
第一步:去重复成功

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;
	}
	
}

Map集合
第二步:年龄从小到大排序

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

代码如下:

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);
}
}

运行结果:
Map集合
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};
//	[aaa@qq.com
	System.out.println(arr);
	System.out.println(Arrays.toString(arr));
}
}