编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

Java的HashMap集合

HashMap集合是Map接口的一个实现类,它用于存储键值映射关系,但必须保证不出现重复的键。接下来通过一个案例来学习HashMap的用法。

import java.util.HashMap;
import java.util.Map;
public class Example {
    public static void main(String[] args) {
        Map map = new HashMap(); // 创建Map 对象
        map.put("1", "Jack"); // 存储键和值
        map.put("2", "Rose");
        map.put("3", "Lucy");
        System.out.println("1: " + map.get("1")); // 根据键获取值
        System.out.println("2: " + map.get("2"));
        System.out.println("3: " + map.get("3"));
    }
}

运行结果:

1: Jack
2: Rose
3: Lucy

例中,首先通过Map的put(Object key,Object value)方法向集合中加入3个元素,然后通过Map的get(Object key)方法获取与键对应的值。前面讲过Map集合中的键具有唯一性,现在向Map集合中存储一个相同的键看看会出现什么情况。现对例进行修改,在第9行代码下面增加一行代码,如下所示:

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

运行结果:

1: Jack
2: Rose
3: Mary

从图中可以看出,Map中仍然只有3个元素,第二次添加的值“Mary”覆盖原来的值“Lucy”,因此证实了Map中的键必须是唯一的,不能重复。如果存储了相同的键,后存储的值则会覆盖原有的值,简而言之就是:键相同,值覆盖。在程序开发中,经常需要取出Map中所有的键和值,那么如何遍历Map中所有的键值对呢? 有两种方式可以实现,第一种方式就是先遍历Map集合中所有的键,再根据键获取相应的值,接下来就通过一个案例来演示这种遍历方式,如例所示。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Example {
    public static void main(String[] args) {
        Map map = new HashMap(); // 创建Map 集合
        map.put("1", "Jack"); // 存储键和值
        map.put("2", "Rose");
        map.put("3", "Lucy");
        Set keySet = map.keySet(); // 获取键的集合
        Iterator it = keySet.iterator(); // 迭代键的集合
        while (it.hasNext()) {
            Object key = it.next();
            Object value = map.get(key); // 获取每个键所对应的值
            System.out.println(key + ":" + value);
        }
    }
}

运行结果:

1:Jack
2:Rose
3:Lucy

例中,是第一种遍历Map的方式。首先调用Map对象的keySet()方法,获得存储Map中所有键的Set集合,然后通过Iterator迭代Set集合的每一个元素,即每一个键,最后通过调用get(Stringkey)方法,根据键获取对应的值。

Map集合的另外一种遍历方式是先获取集合中的所有的映射关系,然后从映射关系中取出键和值。接下来通过一个案例来演示这种遍历方式,如例所示。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Example {
    public static void main(String[] args) {
        Map map = new HashMap(); // 创建Map 集合
        map.put("1", "Jack"); // 存储键和值
        map.put("2", "Rose");
        map.put("3", "Lucy");
        Set entrySet = map.entrySet();
        Iterator it = entrySet.iterator(); // 获取Iterator 对象
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) (it.next()); // 获取集合中键值对映射关系
            Object key = entry.getKey(); // 获取Entry 中的键
            Object value = entry.getValue(); // 获取Entry 中的值
            System.out.println(key + ":" + value);
        }
    }
}

运行结果:

1:Jack
2:Rose
3:Lucy

例7-17中,是第二种遍历Map的方式。首先调用Map对象的entrySet()方法获得存储在Map中所有映射的Set集合,这个集合中存放了Map.Entry类型的元素(Entry是Map接口内部类),每个Map.Entry对象代表Map中的一个键值对,然后迭代Set集合,获得每一个映射对象,并分别调用映射对象的getKey()和getValue()方法获取键和值。

在Map中,还提供了一个values()方法,通过这个方法可以直接获取Map中存储所有值的Collection集合,接下来通过一个案例来演示,如例所示。

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Example {
    public static void main(String[] args) {
        Map map = new HashMap(); // 创建Map 集合
        map.put("1", "Jack"); // 存储键和值
        map.put("2", "Rose");
        map.put("3", "Lucy");
        Collection values = map.values();
        Iterator it = values.iterator();
        while (it.hasNext()) {
            Object value = it.next();
            System.out.println(value);
        }
    }
}

运行结果:

Jack
Rose
Lucy

在例中,通过调用Map的values()方法获取包含Map中所有值的Collection集合,然后迭代出集合中的每一个值。

从上面的例子可以看出,HashMap集合迭代出来元素的顺序和存入的顺序是不一致的。如果想让这两个顺序一致,可以使用Java中提供的LinkedHashMap类,它是HashMap的子类,和LinkedList一样也使用双向链表来维护内部元素的关系,使Map元素迭代的顺序与存入的顺序一致。接下来通过一个案例来学习一下LinkedHashMap的用法,如例所示。

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class Example {
    public static void main(String[] args) {
        Map map = new LinkedHashMap(); // 创建Map 集合
        map.put("1", "Jack"); // 存储键和值
        map.put("2", "Rose");
        map.put("3", "Lucy");
        Set keySet = map.keySet();
        Iterator it = keySet.iterator();
        while (it.hasNext()) {
            Object key = it.next();
            Object value = map.get(key); // 获取每个键所对应的值
            System.out.println(key + ":" + value);
        }
    }
}

运行结果:

1:Jack
2:Rose
3:Lucy

在例中,首先创建了一个LinkedHashMap集合并存入了3个元素,然后使用迭代器将元素取出。从运行结果可以看出,元素迭代出来的顺序和存入的顺序是一致的。

未经允许不得转载: 技术文章 » Java编程 » Java的HashMap集合