黑马训练营:Java基础——Map集合之基础

------- Java EE培训java培训、期待与您交流! ----------

1.概念

该集合存储键值对。一堆一堆往里存。而且要保证键的唯一性。

2.子类对象特点

Map
     |--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是县城同步的。JDK1.0,效率低
     |--HashMap:底层是哈希表数据结构,并允许使用null键null值,该集合是不同步的。JDK1.2,效率高
     |--TreeMap:底层是二叉树数据结构,线程不同步。可以用于给Map集合中的键进行排序。——和Set很像。
其实,Set底层就是使用了Map集合。

3.共性方法

1.添加
      put(K key,V value)
      putAll(Map<? extends K,?extends V> m)
2.删除
      clear()
      remove(Object key)
3.判断
      containValue(Object value)
      containKey(Object key)
      isEmpty()
4.获取
      get(Object key)
      size()
      values()
      entrySet()
      keySet()
以下是共性方法的示例代码及运行效果:
import java.util.HashMap;
import java.util.Map;

public class MapDemo {
    public static void main(String[] args) {
		Map<String, String> map = new HashMap<String,String>();
		//添加元素,如果出现添加时相同的键,那么后添加的值会覆盖原有键的对应值,并且put方法会返回被覆盖的值。
		sopln("01:"+map.put("01", "ZhangSan01"));    //01:null
		//sopln("01:"+map.put("01", "XuDadiao01"));    //01:ZhangSan01
		map.put("02", "LiSi02");
		map.put("03", "WangWu03");
		map.put("04", "ZhaoLiu04");
		
		//sopln("remove03::"map.remove("03"));   //remove03::WangWu03
		map.put("05", "null");
		map.put("null", "Aha");
		sopln("containsKey--"+map.containsKey("03"));   //containsKey--true
		sopln("containsValue--"+map.containsValue("LiSi02"));  //containsValue--true
		sopln("isEmpty--"+map.isEmpty());    //isEmpty--false
		//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断
		sopln("get04--"+map.get("04"));    //get04--ZhaoLiu04
		sopln("get05--"+map.get("05"));    //get05--null
		sopln("getnull--"+map.get("null")); //getnull--Aha
		//获取map集合中所有的值。
		sopln("values--"+map.values());    //values--[ZhangSan01, LiSi02, WangWu03, ZhaoLiu04, Aha, null]
		sopln("map--"+map);
	}
    
    public static void sopln(Object obj){
    	System.out.println(obj);
    }
}

4.keySet方法

如果我们想遍历Map集合的时候会发现,Map集合没有Iterator方法,这时我们就要使用可以Set方法。

示例代码:

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

public class MapDemo2 {
    public static void main(String[] args) {
    	Map<String, String> map = new HashMap<String,String>();
    	map.put("01", "ZhangSan01");
		map.put("02", "LiSi02");
		map.put("03", "WangWu03");
		map.put("04", "ZhaoLiu04");
		
		//先获取map集合的所有键的Set集合,keySet();
		Set<String> keySet = map.keySet();
		//有了Set集合。就可以获取器迭代器。
		for(Iterator<String> it = keySet.iterator();it.hasNext();){
			String key = it.next();
			//有了键就可以通过map集合的get方法来获取其对应的值。
			String value = map.get(key);
			System.out.println("Key="+key+",Value="+value);
		}
	}
}

通过注释我们知道了keySet是如何遍历的,但是为了更为直观的描述,我们用下图来说明,Map集合是如何通过Set集合来遍历的:


输出结果如下:

Key=01,Value=ZhangSan01
Key=02,Value=LiSi02
Key=03,Value=WangWu03
Key=04,Value=ZhaoLiu04

5.entrySet方法

接下来我们认识一下遍历Map集合的另一个方法:

entrySet:将map集合中的映射关系存入到了Set集合中,而这个关系的数据类型就是:Map.Entry

首先我们来看下代码:

Set<Map.Entry<String, String >> entries = map.entrySet();

for(Iterator<Map.Entry<String, String>> it = entries.iterator();it.hasNext();){
	Map.Entry<String, String> mEntry = it.next();
	System.out.println("Key="+mEntry.getKey()+",Value="+mEntry.getValue());
}

运行结果:

Key=01,Value=ZhangSan01
Key=02,Value=LiSi02
Key=03,Value=WangWu03
Key=04,Value=ZhaoLiu04
我们来看下它究竟是怎么遍历的:

通过图中所示我们了解了它是如何工作的,接下来,我们来看一下它的源码:

public interface Map<K,V> {
	interface Entry<K,V> {
		K getKey();
		V getValue();
		V setValue(V value);
	}
}
为了更为清晰,我们看这段代码:

interface Map{
	public static interface Entry{
		public abstract Object getKey();
		public abstract Object getValue();
	}
}
这段代码是毕向东老师敲出来的,更利于了解。 也就是说,我们所使用的方法都是直接实现调用就可以使用的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值