大家好,又见面了,我是你们的朋友全栈君。
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();
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139378.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...