Java集合

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);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读