Map接口及常用的实现类
一、接口 Map<K,V>
- 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map<key,value> 对象名=new 子类<key,value>();
- 特点:键不可以重复、值不可以重复
Map接口方法
①V put(K key,V value)
将指定的值与此映射中的指定键关联(可选操作)。
参数:key - 与指定值关联的键value - 与指定键关联的值
import java.util.HashMap;
import java.util.Map;
public class ClearDome {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
System.out.println(maps);//结果:{java=张三, javascrip=王五, php=李四}
}
}
②void clear()
从此映射中移除所有映射关系(可选操作)。此调用返回后,该映射将为空。
import java.util.HashMap;
import java.util.Map;
public class ClearDome {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
System.out.println(maps);// 结果:{java=张三, javascrip=王五, php=李四}
/**********************************************************/
maps.clear();
System.out.println(maps);//结果:{}
/**********************************************************/
}
}
③boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。更确切地讲,当且仅当此映射包含针对满足 (key==null ? k==null : key.equals(k)) 的键 k 的映射关系时,返回 true。(最多只能有一个这样的映射关系)。
import java.util.HashMap;
import java.util.Map;
public class ContainsKeyDome {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
System.out.println(maps);// 结果:{java=张三, javascrip=王五, php=李四}
/**********************************************************/
boolean bool=maps.containsKey("java");
System.out.println(bool); //结果:true
/**********************************************************/
}
}
④boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。更确切地讲,当且仅当此映射至少包含一个对满足 (value==null ? v==null : value.equals(v)) 的值 v 的映射关系时,返回 true。对于大多数 Map 接口的实现而言,此操作需要的时间可能与映射大小呈线性关系。
import java.util.HashMap;
import java.util.Map;
public class ContainValueDome {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
System.out.println(maps);// 结果:{java=张三, javascrip=王五, php=李四}
/**********************************************************/
boolean bool=maps.containsValue("王五");
System.out.println(bool); //结果:true
/**********************************************************/
}
}
⑤boolean equals(Object o)
比较指定的对象与此映射是否相等。
import java.util.HashMap;
import java.util.Map;
public class EqualDome {
public static void main(String[] args) {
Map<String,String> mapA=new HashMap<String,String>();
Map<String,String> mapB=new HashMap<String,String>();
mapA.put("1001", "a");
mapB.put("1002"," value");
/******************************************************/
boolean bool=mapA.equals(mapB);
System.out.println(bool); //结果:false
/******************************************************/
}
}
⑥V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
import java.util.HashMap;
import java.util.Map;
public class GetDome {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
/******************************************************/
String str=maps.get("php");
System.out.println(str); //结果:李四
/******************************************************/
}
}
⑦void putAll(Map<? extends K,? extends V> m)
从指定映射中将所有映射关系复制到此映射中(可选操作)。
import java.util.HashMap;
import java.util.Map;
public class putAllDome {
public static void main(String[] args) {
Map<String,String> mapA=new HashMap<String,String>();
Map<String,String> mapB=new HashMap<String,String>();
mapA.put("1001", "a");
mapA.put("1003", "jake");
mapB.put("1002"," value");
System.out.println(mapA); //结果:{1003=jake, 1001=a}
System.out.println(mapB);//结果:{1002= value}
/********************************************************/
mapB.putAll(mapA);
System.out.println(mapA);//结果:{1003=jake, 1001=a}
System.out.println(mapB);//结果:{1003=jake, 1002= value, 1001=a}
/********************************************************/
}
}
⑧V remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
import java.util.HashMap;
import java.util.Map;
public class remove {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
/******************************************************/
maps.remove("php");
System.out.println(maps); //结果:{java=张三, javascrip=王五}
/******************************************************/
}
}
⑨Collection<V> values()
返回此映射中包含的值的 Collection 视图。
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class ValueDome {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
/*****************************************************/
Collection<String> coll=maps.values();
System.out.println(coll); //结果:[张三, 王五, 李四]
/****************************************************/
}
}
⑩Set<K> keySet()
得到Map集合中的所有键
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class KeySetDome {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
/****************************************************/
Set<String> sets=maps.keySet();
System.out.println(sets); //结果:[java, javascrip, php]
/****************************************************/
}
}
⑪Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class entrySetDome {
public static void main(String[] args) {
Map<String,String> maps=new HashMap<String,String>();
maps.put("java", "张三");
maps.put("php", "李四");
maps.put("javascrip", "王五");
/****************************************************/
Set<Map.Entry<String, String>> sets=maps.entrySet();
System.out.println(sets); //结果:[java, javascrip, php]
/****************************************************/
}
}
二、Map实现类---------HashMap集合
- 基于哈希表的
Map
接口的实现。此实现提供所有可选的映射操作,并允许使用null
值和null
键。(除了非同步和允许使用 null 之外,HashMap
类与Hashtable
大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 - 特点:线程不安全集合、顺序不一定
三、Map实现类---------LinkedHashMap集合
Map
接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与HashMap
的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入 键,则插入顺序不受影响。- 特点:线程不安全、具有迭代顺序
四、Hashtable集合
- 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非
null
对象都可以用作键或值。 - Hashtable线程安全,运算速度慢。HashMap线程不安全,运算速度快
- 从JDK1.2开始Hashtab就被HashMap代替
- HashMap允许存储null值null键,而Hashtable不允许
- Hashtable的子类Provider哈活跃在开发中