Java学习笔记_24_Map接口(一)

2014-11-23 19:24:50 · 作者: · 浏览: 27

24.Map接口:

Map接口定义了存储“键(key)-值(value)映射对”的方法,Map中不能有重复的“键”,

Map实现类中储存的”键-值“映射对是通过键来唯一标识的,Map底层的”键“使用Set来存放的,

所以Map中的映射对的”键”对应的类必须重写hashCode()和equals()方法,

常用String作为Map的“键”。

Map的添加、删除操作:

Object put(Object key, Object value): 将相互关联的“键-值”存入该映像,如果该关键字已经存在,

那么与此关键字相关的新值将取代就值,否则返回null。

Object remove(Object key): 根据指定的键,把“键-值”从Map中移除。

void putAll(Map t): 将来自特定映像的所有元素添加到该映像。

Void clear(): 从映像中删除所有的映像。

Map中元素的查询操作:

Object get(Object key): 获得与关键字key相关的值,并且返回与关键字key相关的对象,

如果未找到,返回null。

boolean containsKey(Object key): 判断映像中是否存在关键字key。

Boolean containsValue(Object value): 判断映像中是否存在value。

int size(): 返回当前映像中的数量。

boolean isEmpty(): 判断映像是否为空。

Map中元素视图方法:

Set keySet(): 返回映像中所有关键字的视图set集,同时还可以从视图中删除“键-值”对,

但不能添加“键-值”对。

Collectio values(): 返回映像中所有值得视图集,同时还可以从视图中删除“键-值”对,

但不能添加“键-值”对。

Set entrySet(): 返回映像中的“键-值”对,同时还可以以从视图中删除“键-值”对,

但不能添加“键-值”对。

1>实现类HashMap:

HashMap是使用频率最高的一个容器,它内部对“键”用Set进行三列存放,所以根据“键”去取“值”得效率高,

并且它允许使用null 值和null键,但不能保证映射的书序。

下面是HashMap相关用法的例子:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class HashMapTest {

	public static void main(String[] args) {
		// 声明一个HashMap对象
		HashMap
  
    hmp = new HashMap
   
    (); // 向hmp中添加“key - value”对 hmp.put("1", "d"); hmp.put("0", "c"); hmp.put("3", "a"); hmp.put("2", "b"); hmp.put("5", "e"); hmp.put("4", "g"); // 输出“key - value”对 System.out.println("HashMap: \n
    
     "); System.out.println("\n显示“key-value”对: "); System.out.println(hmp); // 删除“key - value”对 hmp.remove("3"); hmp.remove("2"); System.out.println("\n显示删除“key-value“后的”键-值“对: "); System.out.println(hmp); //由key获取value System.out.println("\n由key取得对应value: "); System.out.println("4=" + hmp.get("4")); // 获取全部键值,它的返回类型是Set Set
     
       set = hmp.keySet(); //判断是否存在关键字key System.out.println("\n判断是否存在指定key:"); System.out.println("是否存在key7:" + hmp.containsKey("7")); //判断是否存在指定value System.out.println("\n判断是否存在指定value:"); System.out.println("是否存在key4"+hmp.containsValue("g")); //判断容器是否为空 System.out.println("\n容器是否为空:" + hmp.isEmpty()); //输出容器的容量 System.out.println("\n输出容器的容量:" + hmp.size()); // 生成一个 迭代器 Iterator
      
        it = set.iterator(); // 使用键生成的迭代器输出所有”键-值“对的值 System.out.println("\n输出值: "); while (it.hasNext()) { System.out.print(hmp.get(it.next()) + ";"); } } }
      
     
    
   
  

输出结果:

HashMap:

显示“key-value”对:

{3=a, 2=b, 1=d, 0=c, 5=e, 4=g}

显示删除“key-value“后的”键-值“对:

{1=d, 0=c, 5=e, 4=g}

由key取得对应value:

4=g

判断是否存在指定key:

是否存在key7:false

判断是否存在指定value:

是否存在key4:true

容器是否为空:false

输出容器的容量:4

输出值:

d;c;e;g;

可以看出“键 - 值”对的输出顺序和输出的顺序是不同的。

2>实现类LinkedHashMap:

LilkedHashMap类是hashMap的子类,它可以依照插入的书序来排列元素,增、删、改效率比较高。


下面为LinkedHashMap的例子:

 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Set;
 import java.util.Map;

 public class HashMapTest {

	public static void main(String[] args) {
		//声明一个LinkedHashMap对象
		Map
  
    lhmp = newLinkedHashMap
   
   
    (); //想lhmp中添加“键 - 值”对 lhmp.put(1, "a"); lhmp.put(0, "c"); lhmp.put(3, "a"); lhmp.put(2, "b"); //输出“键 - 值”对 System.out.println("LinkedHashMap: \n
    
     "); System.out.println(lhmp); //获取全部键值,它的返回类型是Set Set
     
       set = lhmp.keySet(); //生成一个 迭代器 Iterator
      
        it = set.iterator(); //使用键生成的迭代器输出所有”键-值“对的值 System.out.println("
       
        "); while (it.hasNext()) { System.out.print(lhmp.get(it.next()) + ";