常用的Map集合

Map集合常用方法

Map集合和Collection集合的区别

Map集合是有Key和Value的,Collection集合是只有Value。

Collection集合底层也是有Key和Value,只是隐藏起来。

1.增加 put (K key, V value)
2.删除 clear() 删除这个集合的所有值 remove(Object key) 根据键删除这一类
3.判断 containsKey(Object key) containsValue(Object value) isEmpty()
4.获取 get(Object key) size() values() entrySet() keySet()

增加

Map的put方法

  • 1.添加集合元素的同时,它可以编辑原有的元素
  • 如果说集合中没有key对应的value,那么就往集合中添加元素
  • 如果说集合对应的key有value值,则代表替换原有的值
  • 2.返回替换前key对应的value值
    在这里插入图片描述

删除

clear() 删除这个集合的所有值

在这里插入图片描述 remove(Object key) 根据键删除这一类

在这里插入图片描述

判断

containsKey(Object key) 这里就举这一个例子
在这里插入图片描述

获取

KeySet():
将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key

entrySet():

Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 。

在这里插入图片描述

Map集合中TreeSet的应用

底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序

package com.zking.Map;

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

/**
 * 1、将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出
 * 		A.建立一个student类,实例化作为key添加到map集合中
 * 		B.对学生进行判重
 * 2、最后按年龄进行排序
 * 3、需求改变、按姓名进行排序
 * @author huguiyun
 *
 */
public class TreeMapDemo {
	public static void main(String[] args) {
//		Map<Student, String > map = new HashMap<>();//判重
//		Map<Student, String > map = new TreeMap<>();//判重需要实现Comparable方法,排序
		Map<Student, String > map = new TreeMap<>(new StuComp());//比较器排序

		map.put(new Student("liuting", 18), "beijing");
		map.put(new Student("wangwang", 43), "xingjiang");
		map.put(new Student("goudan", 28), "dongjing");
		map.put(new Student("xuyangyang", 38), "hulunbeier");
		map.put(new Student("liuting", 18), "beijing");
		map.put(new Student("liutingting", 18), "beijing");
		
		
		System.out.println(map.size());
		Set<Entry<Student, String>> entryset = map.entrySet();
		for(Entry<Student, String> entry:entryset) {
			System.out.println(entry.getKey()+"   ===   "+entry.getValue());
		}
	}
}
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;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Student() {
		super();
	}
	
	//乘以39是为了增大他们的哈希,防止他们的哈希值相等
	@Override
	public int hashCode() {
		return this.getName().hashCode()+this.getAge()*39;
	}
	@Override
	public boolean equals(Object obj) {
		Student stu = (Student)obj;
		return this.getAge() ==stu.getAge()&&this.getName().equals(stu.getName()) ;
	}
	@Override
	public int compareTo(Student o) {//一定要判断主要条件和次要条件
		int num = this.getAge() - o.getAge();
		if(num==0) {
			this.getName().compareTo(o.getName());
		}
		return num;
	}
}


class StuComp implements Comparator<Student>{//比较器排序

	@Override
	public int compare(Student o1, Student o2) {
		int num = o1.getName().compareTo(o2.getName());
		if(num==0) {
			return o1.getAge() - o2.getAge();
		}
		return num;
	}
	
}

Map集合中HashSet的应用

统计字符串中字符出现次数

package com.zking.Map;

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

/**
 * 
 * map集合中的泛型要使用包装类,或者是引用数据类型
 * 
 * 统计字符串中出现的次数
 *     sdkfgkdfadasdfasd
 *     a(2)c(5)
 *     
 * 思考
 *    统计,排序
 *    
 *    统计功能
 *    1.将字符串转为字符数组,将这个字符串中的字符当作map集合中的key,
 *    将出现的次数作为value值
 *    
 *    2.当字符第一次出现的时候,那么用它在集合中进行寻找,返回值必然是null,
 *    之后将该字符对应的值改为1
 *    
 *    3.如果说该字符不是第一次出现,该字符对应的值不为null,然后应该+1
 *     
 * @author huguiyun
 *
 */
public class HashMapDemo {
	public static void main(String[] args) {
		String str = "ksdflaksdfasdrtwrtwerxvsdfghflaihijfaidfai";
		str = cishu(str);
		System.out.println(str);
	}
	public static String cishu(String str) {
		char[] chararray = str.toCharArray();
		Map<Character, Integer> map = new TreeMap<>();
		for(char c : chararray) {
			Integer value = map.get(c);
			if(value==null) {
				map.put(c, 1);
			}
			else {
				map.put(c, ++value);
			}
		}
//		StringBuffer跟string  string 会创建新的空间
		StringBuffer sb = new StringBuffer();
		for(Map.Entry<Character, Integer> entry:map.entrySet()) {
			sb.append(entry.getKey()+"("+entry.getValue()+")");
		}
		return sb.toString();
	}

}

  • 6
    点赞
  • 1
    评论
  • 12
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

一个被代码耽误的天才

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值