黑马训练营:Java基础——Map集合之基础
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 map = new HashMap();//添加元素,如果出现添加时相同的键,那么后添加的值会覆盖原有键的对应值,并且put方法会返回被覆盖的值。sopln("01:"+map.put("01", "ZhangSan01")); //01:null//sopln("01:"+map.put("01", "XuDadiao01")); //01:ZhangSan01map.put("02", "LiSi02");map.put("03", "WangWu03");map.put("04", "ZhaoLiu04");//sopln("remove03::"map.remove("03")); //remove03::WangWu03map.put("05", "null");map.put("null", "Aha");sopln("containsKey--"+map.containsKey("03")); //containsKey--truesopln("containsValue--"+map.containsValue("LiSi02")); //containsValue--truesopln("isEmpty--"+map.isEmpty()); //isEmpty--false//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断sopln("get04--"+map.get("04")); //get04--ZhaoLiu04sopln("get05--"+map.get("05")); //get05--nullsopln("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 map = new HashMap();map.put("01", "ZhangSan01");map.put("02", "LiSi02");map.put("03", "WangWu03");map.put("04", "ZhaoLiu04");//先获取map集合的所有键的Set集合,keySet();Set keySet = map.keySet();//有了Set集合。就可以获取器迭代器。for(Iterator 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> entries = map.entrySet();for(Iterator> it = entries.iterator();it.hasNext();){Map.Entry 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 {interface Entry {K getKey();V getValue();V setValue(V value);}
}
为了更为清晰,我们看这段代码:
interface Map{public static interface Entry{public abstract Object getKey();public abstract Object getValue();}
}这段代码是毕向东老师敲出来的,更利于了解。 也就是说,我们所使用的方法都是直接实现调用就可以使用的。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
