Map集合

作者: luoqiang108 | 来源:发表于2018-03-06 14:33 被阅读0次
  • Map接口定义的集合又称查找表,用于存储所谓“Key-Value”映射对。Key可以看成是Value的索引,作为Key的对象在集合中不可以重复。
  • 根据内部数据结构不同,Map接口有多种实现类,其中常用的有内部为hash表实现的HashMap和内部为排序二叉树实现的TreeMap。Map接口中常用的方法为get和put:
方法(其中V、K代表泛型) 解释
V put(K key,V value) 将Key-Value对存入Map,如果在集合中已经包含该Key,则操作将替换该Key对应的Value,返回值为该Key原来所对应的Value(如果没有则返回null)。
V get(Object key) 返回与参数Key所对应的Value对象,如果不存在则返回null。
import java.awt.Point;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
 * Map数据结构
 * 存放数据以key-value的形式成对保存
 * Map保存的数据可以重复,但是key不可以!
 * 若重复保存相同的key的value时,实际的操作是替换value操作。
 *
 * 同样这样的数据结构在存放数据是也不建议存放两种以上的数据类型,
 * 所有通常我们在使用Map时也要使用泛型约束存储内容的类型
 */
public class MapTest {
    public static void main(String[] args) {
        /**
         * 创建Map时使用泛型。这里要约束两个类型,一个是key的
         * 类型,一个是value的类型
         *
         * 创建一个key为字符串value为Point的Map
         */
        Map<String,Point> map = new HashMap<String,Point>();
        map.put("1,2",new Point(1,2));
        map.put("3,4",new Point(3,4));
        System.out.println(map);//{1,2=java.awt.Point[x=1,y=2], 3,4=java.awt.Point[x=3,y=4]}
        /**
         * 注意,因为map中已经存在了key为"1,2"的元素。若再次以
         * 该key存放数据,那么Point(5,6)会替换之前的Point(1,2)!
         */
        map.put("1,2",new Point(5,6));
        System.out.println(map);//{1,2=java.awt.Point[x=5,y=6], 3,4=java.awt.Point[x=3,y=4]}
        /**
         * 获取map中的元素使用get方法
         * V get(K key):传入对应的key获取其对应的Value
         */
        Point p = map.get("1,2");
        System.out.println(p);//java.awt.Point[x=5,y=6]
        /**
         * 若给定key在map中不存在则返回null!
         * 所有,原则上在map中获取元素时要先判断是否有该元素,
         * 要有在使用,避免空指针异常的出现。
         *
         * Map在获取元素时非常有针对性。
         * 集合想获取元素需要遍历集合内容。而Map不需要。你只要给
         * 它特定的key就可以获取该元素。
         *
         * 计算机中有这样一句话:
         *      越灵活的程序性能越差,顾及的多了。
         */
        p = map.get("haha");
        //System.out.println(p.getX()+","+p.getY());//java.lang.NullPointerException
        /**
         * Map的其它方法
         * boolean containsKey(K key):当前map中是否包含给定的key
         * boolean containsValue(V value):当前map中是否包含给定的value
         */
        System.out.println(map.containsKey("123"));//false
        System.out.println(map.containsValue(new Point(3,4)));//true
        /**
         * 遍历HashMap
         * 方法1:获取所有的key并根据key获取value从而达到遍历的效果
         * HashMap获取所有key的方法:keySet()
         * 该方法可以获取保存在该map下所有的key并以Set集合的形式返回
         */
        /**
         * 获取当前map中所以key
         * 因为key在HashMap的泛型中规定了类型为String
         * 所有返回的Set中的元素也应是String,为了更好的使用
         * 我们定义Set类型变量时也应该加上泛型
         */
        Set<String> keyset = map.keySet();
        /**
         * 遍历所有的key,根据key去map中获取对应的value
         */
        for (String key:keyset){
            System.out.println(map.get(key));//根据key获取value
        }
        //普通for循环,不建议用,建议用上面这种循环
        for (Iterator<String> it = keyset.iterator(); it.hasNext();){
            String key = it.next();
            System.out.println(map.get(key));//根据key获取value
        }
        /**
         * LinkedHashMap:和HashMap使用上完全一致,内部维护着一个链表,
         * 可以使其存放元素时的顺序与迭代时一致。
         * 只是存放和取出的顺序是一致的,这点和HashMap无序是不一致的。
         */
        /**
         * 迭代map的方式2
         * 以”键值对“的形式迭代
         * map支持另一个方法entrySet()
         * 该方法返回一个Set集合,里面的元素是map中每一组键值对,
         * map以Entry类的实例来描述每一个键值对
         *
         * Entry描述一个键值对
         * 其中两个方法:
         *      getKey():获取key值
         *      getValue():获取value值
         *
         * Entry所在位置:java.util.Map.Entry
         * Entry也需要泛型的约束。其约束的泛型应该和Map相同!
         * 因为一个Entry实例保存这个Map中的一组键值对。
         */
        Set<Map.Entry<String, Point>> entries = map.entrySet();
        for (Map.Entry<String, Point> entry:entries){
            //获取key
            String key = entry.getKey();
            //获取value
            Point value = entry.getValue();
            System.out.println(key+":"+value);
        }
    }
}

相关文章

  • 2019-01-03

    Map集合 Map集合 1.1Map集合概念 Map集合是一种存放关系对象的对象的双列集合。 1.2Map集合的常...

  • 2019-01-13

    基于Map集合重点整理 Map集合 1.1Map集合概念 Map集合是一种存放关系对象的对象的双列集合。 1.2M...

  • Map集合Map<Integer,String> m

    01Map集合概述 A:Map集合概述:我们通过查看Map接口描述,发现Map接口下的集合与Collection接...

  • Map接口

    01Map集合概述 A:Map集合概述:我们通过查看Map接口描述,发现Map接口下的集合与Collection接...

  • 2020-06-30【Map】

    Map概述 Map集合的基本功能 Map集合的获取功能 Map集合的遍历 练习 Collections类 斗地主

  • day04 【Map】

    day04 【Map】 主要内容 Map集合 教学目标 能够说出Map集合特点 使用Map集合添加方法保存数据 使...

  • Java - Part 6

    一、Map集合Map集合和Collection集合不一样,Map集合是双列集合,以键值对的形式存在,键不能重复,值...

  • 集合详解

    Iterator:迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合...

  • 第六篇学习笔记

    第六篇学习总结 一、Map集合 Map集合和Collection集合不一样,Map集合是双列集合,以键值对的形式存...

  • Map----entrySet

    Map集合不需要迭代器; 他是先将Map集合转化为Set集合; 然后Set集合调用迭代器进行遍历。 Map.Ent...

网友评论

      本文标题:Map集合

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