常用的Map集合

常用的Map集合Map集合Map集合常用方法增加删除判断获取Map集合中TreeSet的应用Map集合中HashSet的应用Map集合常用方法Map集合和Collection集合的区别Map集合是有Key和Value的,Collection集合是只有Value。Collection集合底层也是有Key和Value,只是隐藏起来。1.增加put(Kkey,Vvalue)2.删除…

大家好,又见面了,我是你们的朋友全栈君。

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

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139378.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 好博客[通俗易懂]

    好博客[通俗易懂]Elar的博客 http://www.cnblogs.com/elaron/peghoty的博客 http://blog.csdn.net/itplus/article/details/10484553炼数成金         http://f.dataguru.cn/thread-339602-1-1.htmlverydemo    http://www.verydemo.

    2022年7月21日
    14
  • IDEA怎么生成UML类图

    IDEA怎么生成UML类图最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑)、draw.io(可视化编辑)、PlantUML(代码生成),其实看到这里我就想IDEA中有没有像PlantUML一样的自动生成的插件,本着怀疑的态度百度了一下,果然IDEA还是很强大的,这个插件都是自带的,接下稍微讲述如何利用IDEA生成UML类图的教程。…

    2022年7月12日
    80
  • centos frp内网穿透_内网穿透 无需公网ip

    centos frp内网穿透_内网穿透 无需公网ip说明Linux搭建frp实现内网穿透操作步骤安装步骤省略(下载解压拷贝到server服务器和client服务器完事)具体移步:github注意程序文件需要追加可执行权限!注意相关端口放行!服务端配置文件:frps.ini[common]bind_port=7777authentication_method=tokentoken=12345678tls_only=truekcp_bind_port=7777max_pool_count=10l

    2025年11月5日
    2
  • java是面向对象还是面向过程_Java面向对象编程和面向过程编程的区别[通俗易懂]

    java是面向对象还是面向过程_Java面向对象编程和面向过程编程的区别[通俗易懂]Java面向对象编程和面向过程编程的区别本章节目标:了解面向对象,知道类和对象的区别,会进行类的定义。知识框架:Java面向对象编程和面向过程编程的区别“面向过程”(ProcedureOriented)是一种以过程为中心的编程思想,简称OP。“面向过程”也可称之为“面向记录”编程思想,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。所以面向过…

    2022年7月8日
    20
  • MyBatis插件_mybatis插件实际应用

    MyBatis插件_mybatis插件实际应用2018年2月更新2017.3可用,提供一个网上比较多的一个版本V3.21版本,下载资源里面有个已整合版直接解压放入C:\Users\你的用户名\.IntelliJIdea2017.3\config\plugins这个文件夹即可CSDN下载注意:有些人就是不成功!因为你的IDEA版本太老了,不支持3.21这个…

    2022年10月7日
    4
  • java.lang.ClassNotFoundException: okio.ForwardingTimeout 已解决

    java.lang.ClassNotFoundException: okio.ForwardingTimeout 已解决这个问题发现是由于版本问题引起的,下面是我用的两个jar源码对比:先看看okio-1.13.0.jar的,会发现在forwardingSource下面有ForwardingTimeout这个类下面是okio-2.0.0.jar包,会发现那个ForwardingTimeout没了,不知道官方改成什么了我用okhttp-3.8.0.jar引用okio-2.0.0.jar的时候就会…

    2022年5月29日
    109

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号