java之Map
概述
现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,程序员和女朋友 。这种一一对应的关系,就叫做映射。
Java提供了专门的集合类用来存放这种对应关系的对象,即java.util.Map接口。
java.util.Map和java.util.Collection的区别:
- Collection集合,元素孤立存在。(理解为单身),而Map集合,元素是成对存在的
- Collection集合称为单列集合,Map集合称为双列集合。
需要注意的是,Map集合不能包含重复的键,值可以重复,且每个键只能对应一个值。
Map接口中的常用方法
- public V put(K key, V value): 将key与value存入Map集合中。
- public V remove(Object key): 删除指定的key对应的元素,并返回被删除元素的value值。
- public V get(Object key)根据指定的key获取对应的value。
- boolean containsKey(Object key): 判断集合中是否包含指定的key。
- public Set<K> keySet(): 获取Map集合中所有的key,存储到Set集合中。
- public Set<Map.Entry<K,V>> entrySet(): 获取Map集合中所有的键值对对象的集合(Set集合)。
Map常用子类
- HashMap: 底层采用哈希表存储元素,元素存取无序。只允许一个key为null,允许多个Value为null。
- LinkedHashMap: 底层采用哈希表和链表存储元素,是- HashMap的子类,唯一的区别在于元素存取有序。
- TreeMap:底层采用红黑树(Red-Black tree)存储元素,且默认情况下根据自然顺序对元素进行排序。不允许key为null,允许Value为null 。
tips:以上三个map集合均为不同步的。
- Hashtable:和- HashMap的区别在于,- Hashtable是同步的(单线程),且key和value不允许为 null 。
tips:java.util.Hashtable基本上不常用,不过它的子类java.util.Properties是个唯一和IO流相结合的集合,目前仍然活跃在java舞台上,也算是给他老爹挣了点面子吧。
遍历Map的方式
一共有两种方式(其实是4中,另外两种不推荐)
- 遍历键与值:map.entrySet()
public class Demo07 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("钢铁侠",35);
        map.put("蜘蛛侠",18);
        map.put("黑寡妇",29);
        map.put("惊奇队长",35);
        //遍历键与值
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            System.out.println("key= "+entry.getKey()+" ,value= "+entry.getValue());
        }
    }
}
- 遍历键或值:map.entrySet()
public class Demo07 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("钢铁侠",35);
        map.put("蜘蛛侠",18);
        map.put("黑寡妇",29);
        map.put("惊奇队长",35);
        //只遍历key
        Set<String> set = map.keySet();
        for (String key : set) {
            System.out.println(key);
        }
        //只遍历value
        Collection<Integer> values = map.values();
        for (Integer value : values) {
            System.out.println(value);
        }
    }
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号