java集合之HashMap

HashMap<K,V>: 位于java.util包下。


1 HashMap概述

特点:基于哈希表的 Map 接口的实现;键唯一,值可重复;允许存放null值和null键;无序(存取顺序不一致);实现不同步,线程不安全;除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。如果要顺序输出存储的内容,必须使用LinkedHashMap,该类继承自HashMap,但是内部保证了存储的有序性。

保证唯一性:依赖于存储元素的equals()和hashCode()方法的实现

常用构造:

 HashMap<K,V>() : 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap

常用方法:

1)添加功能

public V put(K key,V value)

2)获取功能

public Set<Map.Entry<K,V>> entrySet()  : 获取键值对集合

pub V get(Object key) : 根据键获取对应的值

public Set<K> keySet(): 获取键的集合

public Collection<V> vlaues():获取值的集合

public int size():获取键值对的个数

3)删除功能

public V remove(Object key):移除此键值对,返回值

public void clear() :从映射中移除所有映射关系

4)判断功能

boolean containsKey(Object key) : 判断是否包含对应的键

boolean isEmpty():判断该映射关系是否不包含键值对


2 HashMap的使用:

例1 :实现遍历方式+验证如果存取的键重复

package com.map.demo;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HashMapDemo {
  public static void main(String[] args) {
    Map<Integer,String> map = new HashMap<Integer,String>();
    map.put(1, "cat");
    map.put(2, "dog");
    map.put(3, "tiger");
    map.put(3, "tree");
    map.put(4, "elephent");

    Set<Integer> set = map.keySet();
    for(Integer i : set){
      String value = map.get(i);
      System.out.println("编号:"+i+"动物是:"+value);
    }

    System.out.println("--------------------------");

    Set<Map.Entry<Integer, String>> allEntry = map.entrySet();
    for(Map.Entry<Integer, String> entry : allEntry){
      Integer key = entry.getKey();
      String value = entry.getValue();
      System.out.println("编号:"+key+"动物是:"+value);
    }
  }
}

输出结果:

编号:1动物是:cat
编号:2动物是:dog
编号:3动物是:tree
编号:4动物是:elephent
--------------------------
编号:1动物是:cat
编号:2动物是:dog
编号:3动物是:tree
编号:4动物是:elephent

分析:此处引出两个问题:

1)Map集合的两种遍历方式:

   A:由key取value:先获取key集合,再根据key寻找对应的value

   B:获取键值对集合,一一获取

2)Map集合如何实现存取的键的唯一性

   这个需要查看HashMap集合的put方法的源码:

   分析查看源码可知:如果重复存取相同key值的元素,则会将最后存取的键值对的值(新值)替换掉前一个键值对的值。并且该方法返回原来的值(旧值)。



原文地址:https://www.cnblogs.com/zwbg/p/5904438.html