zoukankan      html  css  js  c++  java
  • Map接口

    Collection接口是保存单值最大的父接口,那么Map接口保存的内容是一对值,所有的内容是以:key->value的形式保存的。

    Map接口本身有三个常用的子类:

    HashMap,Hashtable,TreeMap

    Map接口下的操作方法:

    V put(K key,V value):增加内容

    V get(Object key):取得设置的内容,根据key取得

    boolean contarinsKey(Object key):查找指定的key是否存在

    boolean containsValue(Object value):查找指定的value是否存在

    boolean isEmpty():判断集合是否为空

    Set<K> keySet():将全部的key变为Set集合

    Collection<V> values():将全部的values变为Collection集合

    V remove(Object key):根据key删除内容

    void putAl(Map<? extends K,? extends V>m):增加一组数据

    新的子类:HashMap

    import java.util.*;
    public class HashMapDemo {
     public static void main(String args[])
     {
       Map<String,Integer> map=new HashMap<String,Integer>(); 
       map.put("1", 1);
       map.put("2", 2);
       map.put("3", 3);
       map.put("4", 4);
       map.put("5", 5);
      
       int value=map.get("1");
       System.out.println(value);
       System.out.println(map);
       //Map中的全部key以Set集合的形式返回
       Set<String> set=map.keySet();
       Iterator<String> iter=set.iterator();
       while(iter.hasNext()){
        System.out.println(iter.next());
       }
     } 
    }
    HashMap属于无序的操作,也可以通过values()方法,将全部的value通过一个Collection接口的形式返回。

    Collection<Integer> col=map.values();

    HashTable只是扩展了集合操作类,其应哟个实现了Map接口而已。

    HashMap:采用异步处理,非线程安全的操作。

    Hashtable:采用同步处理,线程安全操作。

    按Key排序的子类:TreeMap

    TreeMap使用的时候可以进行按照key的方式进行排序。

    Map<String,Integer> map=new TreeMap<String,Integer>();

    如果现在给定任意的一个类,然后实现排序,那么这个类要实现Comparable接口。

    Map不能直接使用Iterator输出,在Map中虽然是以一对值的形式出现的,可是真正的保存的还是一个单独的对象,即:程序将key->value的放在一个对象之中,之后将此对象加入到集合里。

    Map.Entry(K,V),从定义格式上可以发现,此类属于static声明的接口,而且是一个内部接口。

    一个Map里面包含有很多对Map.Entry,而Map.Entry里面含有key->value,所以可以知道Map接口使用Iterator输出的标准操作。

    1,通过Map接口中的:Set<Map.Entry<K,V>> entrySet()方法取得Set集合

    2,通过Set接口为Iterator进行初始化的操作。

    3,通过Iterator取出每一个Map.Entry

    4,通过Map.Entry进行key与value的分离

    import java.util.*;
    public class IteratorMapDemo {
     public static void main(String args[])
     {
      Map<String,Integer> map=new HashMap<String,Integer>();
         map.put("1", 1);
         map.put("2", 2);
         map.put("3", 3);
         map.put("4", 4);
         Set<Map.Entry<String, Integer>> alset=map.entrySet();
         Iterator<Map.Entry<String, Integer>> iter=alset.iterator();
         while(iter.hasNext())
         {
          Map.Entry<String, Integer> me=iter.next();
          System.out.println(me.getKey()+"-->"+me.getValue());
         }
     }
    }

    也可以使用foreach操作Map.Entry<>

    for(Map.Entry<String,Integer> me:map.entrySet())

    在Map中可以使用匿名对象找到一个key对应得value

    Map<String,Person> map=new HashMap<String,Person>();

    map.put("zs",new Person("张三",30));

    System.out.println(map.get(new String("zs")));

    但是如果是使用Map<Person,String>那么取不出对应的String值,除非Person类实现了equals()和hashCode()方法来区分是否是同一个对象。

    如果是用非系统类作为key的话,那么该类要实现equals()和hashCode()方法。

  • 相关阅读:
    笔记:今天必须读完的文章
    windows android 第三方模拟器 看日志
    彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑
    texturepacker命令行处理图片 格式选择
    Android插件化主流框架和实现原理
    Socket心跳包机制与实现 一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。
    图解:HTTP 范围请求,助力断点续传、多线程下载的核心原理
    localstorage的跨域存储方案 介绍
    UGUI的图集处理方式-SpriteAtlas的前世今生
    web自动化,下拉滚动到底部/顶部和下拉滚动到指定的元素
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1948762.html
Copyright © 2011-2022 走看看