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()方法。

  • 相关阅读:
    MySQL系列(三) MySQL的约束
    mysql 下载 国内 镜像
    ckeditor
    比较时间
    远程获取文件
    多线程一例
    requests
    json传递对象字典
    pymysql和mysqldb的区别
    sql
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1948762.html
Copyright © 2011-2022 走看看