- 一、HashMap的结构
- 二、HashMap的继承类
- 三、Key和Value类型设定
- 四、常规使用方法
- 五、获取key或者value集合
一、HashMap的结构
HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改,它存储的内容是键值对(key-value)映射。
HashMap 的 key 与 value 类型可以相同也可以不同。
可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。
基本类型对应的包装类表如下:
| 基本类型 | 引用类型 |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| char | Character |
| float | Float |
| double | Double |
ex:
下边的例子设置key为Integer类型,value为String类型。
HashMapmap = Map.of(1,"one",2,"two",3,"three");
| key | value |
|---|---|
| 1 | one |
| 2 | two |
| 2 | three |
1.引入类
import java.util.HashMap; // 引入 HashMap 类
2.初始化
HashMapSites = new HashMap ();
3.常用方法
(1)添加元素 :put( )方法
HashMapSites = new HashMap (); // 添加键值对 Sites.put(1, "Google"); Sites.put(2, "Runoob"); Sites.put(3, "Taobao"); Sites.put(4, "Zhihu");
(2)访问元素 :get( )方法
HashMapSites = new HashMap (); // 添加键值对 Sites.put(1, "Google"); Sites.put(2, "Runoob"); Sites.put(3, "Taobao"); Sites.put(4, "Zhihu"); //打印访问元素 System.out.println(Sites.get(3));
(3)删除元素:remove( )方法
删除 key 对应的键值对(key-value)
HashMapSites = new HashMap (); // 添加键值对 Sites.put(1, "Google"); Sites.put(2, "Runoob"); Sites.put(3, "Taobao"); Sites.put(4, "Zhihu"); //删除元素 Sites.remove(4);
(4)删除所有的HashMap:clear( )方法
删除所有键值对(key-value) ,清空整个数据结构。
HashMapSites = new HashMap (); // 添加键值对 Sites.put(1, "Google"); Sites.put(2, "Runoob"); Sites.put(3, "Taobao"); Sites.put(4, "Zhihu"); //删除所有键值对 Sites.clear();
(5)计算大小:size( )方法
// 创建 HashMap 对象 Sites
HashMap Sites = new HashMap();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites.size());
(6)有无映射关系:isEmpty()方法
如果 HashMap 中不包含任何键/值对的映射关系则返回 true,否则返回 false。
// 创建 HashMap 对象 Sites
HashMap Sites = new HashMap();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
result = sites.isEmpty(); // true
//如果 HashMap 中不包含任何键/值对的映射关系则返回 true
//否则返回 false。
(7)检查是否有key对应的映射关系:containsKey() 方法
containsKey() 方法检查 hashMap 中是否存在指定的 key 对应的映射关系。
如果 hashMap 中是否存在指定的 key 对应的映射关系返回 true,否则返回 false。
// 创建 HashMap 对象 Sites
HashMap Sites = new HashMap();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
if(sites.containsKey(1)) {
System.out.println("key 为 1 存在于 sites 中");
} //判断key为1的映射关系是否存在。
if(!sites.containsKey(5)) {
sites.put(5, "Wiki");
} //如果key为5的映射关系不存在,则插入key为5的映射关系。
(8)检查是否有value对应的映射关系:containsValue() 方法
containsValue() 方法检查 hashMap 中是否存在指定的 value 对应的映射关系。
如果 hashMap 中是否存在指定的 value 对应的映射关系返回 true,否则返回 false。
// 创建 HashMap 对象 Sites
HashMap Sites = new HashMap();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
if(sites.containsValue("Runoob")) {
System.out.println("Runoob 存在于 sites 中");
}//判断value为"Runoob"的映射关系是否存在。
if(!sites.containsValue("Wiki")) {
sites.put(sites.size(), "Wiki");
}//如果value为"Wiki"的映射关系不存在,则插入value为"Wiki"的映射关系。
五、获取key或者value集合
1.获取key集合
Map集合为我们提供了两种取值方式:
(1)keySet():
返回值类型:Set< Object > 方法是 keySet();返回此映射中包含键的Set 视图 ,将Map中所有的键存入到Set集合中,因为Set具备迭代器,所以用迭代的方式取出所有键,再根据get()方法取出所对应的值。
(2)entrySet():
返回值类型:Set
即:将Map集合中的映射关系存入Set集合中这个关系的数据类型 Map.Entry。
| 方法 | 过程 |
|---|---|
| keySet() | 先获取所有键的集合, 再根据键获取对应的值。 |
| entrySet() | 先获取map中的键值关系封装成一个个的entry对象, 存储到一个Set集合中,再迭代这个Set集合, 根据Entry获取对应的Key和Value向集合中存储自定义对象 。 |
<1> 获取:使用keySet() 方法返回映射中所有 key 组成的 Set 视图。
// 创建 HashMap 对象 Sites
HashMap Sites = new HashMap();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
<2> 使用entrySet() 方法返回映射中包含的映射的 Set 视图。
for(HashMap.Entryentry : Sites.entrySet()) { System.out.println(entry.getKey()); }
2.遍历
(1).使用迭代器进行遍历。
//获取
Set set = Sites.KeySet(); //利用Set()函数获取newmap中所有的key值
//遍历
Iterator ite = Sites.iterator(); // 创建一个叫ite的迭代器
while(ite.hasNext()){ // 利用hasNext()判断下一个元素是否存在
System.our.println((String)ite.Next());
// !这句才是重点 获取到Key值后要进行强制类型转换才能输出
newmap.get(ite.Next()).showStudent();
// Next() 第一次调用时返回的是newmap里的第一个元素的key值
// 下次调用返回下一个元素的key值
(2)for循环直接访问。
这种方法多半是用来直接访问的,很少带有更多的对key置的操作,相反使用迭代器更容易进行多次重复访问,比较,搜索等操作。
for(int key : Sites.keySet()){
System.out.println(key);
}
3.获取value值
通过values方法获取value集合,因为value可以重复,因此返回的类型为Collection。//注意类型是Collection
Collectionvalues = map.values(); for(Integer i : values) System.out.println(i); }



