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

原文地址:https://www.cnblogs.com/jinzhengquan/p/1948762.html