Map,HashMap

Map

1、 可以根据键 提取对应的值

2、 键不允许重复,如果重复值会被覆盖

3、 存放的都是无序数据

4、 初始容量是16,默认的加载因子是0.75

在这里插入图片描述
案例:

//这个类用来测试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);

       }

      

    }

}

HashMap:

HashMap的键要同时重写hashCode()和equals()

hashCode()用来判断确定hash值是否相同

equals()用来判断属性的值是否相同

– equals()判断数据如果相等,hashCode()必须相同

– equals()判断数据如果不等,hashCode()尽量不同

在这里插入图片描述
当链表长度达到8并且散列表长度达到64,链表转化为红黑树

HashMap案例:

//这个类用来测试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);

    }

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值