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);
}
}
运行结果:
- 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};
// [aaa@qq.com
System.out.println(arr);
System.out.println(Arrays.toString(arr));
}
}
上一篇: ES6对象字面量增强写法
下一篇: es6对象定义简写