Map接口
2021-06-29 本文已影响0人
情安
1.介绍
java.util 接口 Map<K,V>
类型参数: K - 此映射所维护的键的类型 ;V - 映射值的类型。
也叫哈希表、散列表。常用于存 键值对 结构的数据。其中的键不能重复,值可以重复。
2.特点
1、 可以根据键,提取对应的值
2、 键不允许重复,如果重复值会被覆盖
3、 存放的都是无序数据
4、 初始容量是16,默认的加载因子是0.75
继承结构
3.常用方法测试
package cn.tedu.collection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
//这个类用来测试Map接口
public class Test8_Map {
public static void main(String[] args) {
//1,创建Map对象
//map中的数据要符合映射规则,需要同时指定K和V的数据类型。到底指定成什么类型,要看你想添加什么数据。
Map<Integer,String> map = new HashMap();
//2,常用方法
//添加数据,需要同时指定key和value
map.put(9527, "唐伯虎");
map.put(9529, "秋香姐");
map.put(9528, "如花");
map.put(9528, "石榴姐");
//特点1:map是一个无序集合 格式:{9527=唐伯虎}
//特点2:map中,key不可以重复,如果重复,value会被覆盖
//{9527=唐伯虎, 9528=石榴姐, 9529=秋香姐}
System.out.println(map);
// map.clear();//清空集合
System.out.println( map.containsKey(9527));//判断是否包含指定的key
System.out.println( map.containsValue("秋香姐"));//判断是否包含指定的value
System.out.println( map.equals("如花"));//判断是否和指定的元素相等
System.out.println( map.get(9528));//根据key获取value
System.out.println( map.hashCode());//获取map集合的哈希码值
System.out.println( map.isEmpty());//判断集合是否为空
System.out.println( map.remove(9529));//根据可以删除对应的value
System.out.println( map.size());//获取集合的长度
Collection<String> vs = map.values();//把map中的所有value收集起来放到Collection里
System.out.println(vs);
//遍历map中的数据,需要把map集合转成set集合
// Set<K> keySet() :把map中的所有key存入set集合
Set<Integer> keys = map.keySet();
//遍历set集合,得到每个key
Iterator<Integer> it = keys.iterator();
while(it.hasNext()) {
Integer key = it.next();//获取得到的key
String value = map.get(key);//拿着key去map中value
System.out.println(key + ":" + value);
}
// Set<Map.Entry<K,V>> entrySet() :把map集合中的一组key+value数据整体放入set中
Set<Entry<Integer,String>> set = map.entrySet();
//遍历set,得到每个Entry对象
Iterator<Entry<Integer, String>> it2 = set.iterator();
while(it2.hasNext()) {
Entry<Integer, String> entry = it2.next();//得到每个Entry对象
Integer key = entry.getKey();//获取Entry对象封装着的key
String value = entry.getValue();//获取Entry对象封装着的value
System.out.println(key +"-"+value);
}
}
}
4.HashMap实现类
4.1介绍
HashMap的键要同时重写hashCode()和equals()
hashCode()用来判断确定hash值是否相同
equals()用来判断属性的值是否相同
-- equals()判断数据如果相等,hashCode()必须相同
-- equals()判断数据如果不等,hashCode()尽量不同
HashMap底层是一个Entry数组,当存放数据时会根据hash算法计算数据的存放位置。算法:hash(key)%n,n就是数组的长度。当计算的位置没有数据时,就直接存放。当计算的位置,有数据时,也就是发生hash冲突/hash碰撞时,采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。
4.2字符串中的字符统计
接收用户输入的一串字符串,统计出现的每个字符的个数
package cn.tedu.collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
//这个类用来测试Map集合:字符串中的字符统计
public class Test10_MapTest {
public static void main(String[] args) {
// 1、接收用户输入的一串字符串
String input = new Scanner(System.in).nextLine();
// 2、想办法获取到每个字符
//遍历字符串,并根据下标获取对应的字符
Map<Character,Integer> map = new HashMap();//创建map存数据,格式:{a=1,b=2,c=1}
for(int i = 0 ; i < input.length() ; i++) {
// --map的key是啥?就是2、获取到的字符
char key = input.charAt(i);//根据下标获取对应的字符
// 3、统计出现的每个字符的个数,,存起来,存map里
Integer value = map.get(key);//拿着key去map里找value
if(value==null) {
map.put(key, 1);//如果是默认值null就是没存过,存1就行
}else {
map.put(key, value+1);//如果存过值,+1就行
}
}
System.out.println(map);
}
}