黑马训练营:Java基础——Map集合之基础,训练营map
分享于 点击 14329 次 点评:135
黑马训练营:Java基础——Map集合之基础,训练营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<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();
}
}
这段代码是毕向东老师敲出来的,更利于了解。 也就是说,我们所使用的方法都是直接实现调用就可以使用的。
相关文章
- 暂无相关文章
用户点评