美文网首页技术研发汇集
【Java】Java集合HashMap API

【Java】Java集合HashMap API

作者: 知信学源 | 来源:发表于2024-01-21 14:46 被阅读0次

一、Map接口

Map接口:将键映射到值的对象,一个映射表不能有重复的键,每个键最多映射一个值;

1.键值对存储一组对象;

2.key不能重复,value可重复;

3.具体的实现类有:

1.HashMap;2.TreeMap;3.Hashtable;4.LinkedHashMap;

二、HashMap简介

基于哈希表的Map接口的实现类,允许使用null值和键,不保证顺序恒久不变;

实现原理:

1.基于哈希表,由数组+链表+(jdk1.8之后)二叉树{又叫红黑树,只标记了红red};

2.默认加载因子为0.75(百分之七十五):表示数据存储达到75%后要创建新数组或扩容;默认数组大小是16;

3.把对象存储到哈希表中,如何存储?

答:把key对象通过hash()方法计算哈希值,然后用这个哈希值对数组长度取余数,来决定该key对象存储在数组中的位置,当这个位置有多个对象时,再以链表结构存储,jdk1.8之后,当链表长度大于8时,链表转换为红黑树(二叉树)存储;

这样的目的,是为了取值更快,存储的数据越大,性能消耗越少,表现越明显;

4.扩充原理:当数组容量超过了75%,表示数组需要扩充,如何扩充?

答:扩充的算法是:当前数组容量<<1(相当于乘2),扩大一倍,每次扩充表示哈希表重新散列(重排序,重新计算每个对象的存储位置),扩充次数多了影响性能.

5.线程不安全,适合单线程;

三.代码演示

private static void HashMap(){

Map<Integer,String> map=new HashMap<>();

map.put(1,"贝贝");

map.put(2,"京京");

map.put(3,"欢欢");

map.put(4,"莹莹");

map.put(5,"妮妮");

//获取键的值

System.out.println(map.get(1));

//forEach取值

map.forEach((k,v)->System.out.println(k+"-->"+v));

//使用entryset返回一个set集合,遍历map

Set<Map.Entry<Integer,String>> set=map.entrySet();

for (Map.Entry e:set){

System.out.println(e.getKey()+"-->"+e.getValue());

}

//通过keySet获取键,再使用键获取值

Set<Integer> set2=map.keySet();

for (Integer i:set2){

String v=map.get(i);

System.out.println(i+"--->"+v);

}

//通过values方法获取map的值,返回一个collection对象;

Collection<String> collection=map.values();

for (String s:collection){

System.out.println(s);

}

}

四.小结

本章对Java中的Map接口–HashMap进行了概述及演示,map接口在Java中是比较常用的数据封装的接口,尤其是HashMap,最为常用。

相关文章

网友评论

    本文标题:【Java】Java集合HashMap API

    本文链接:https://www.haomeiwen.com/subject/hhseodtx.html