Map是什么?Map就是用来存储数据的。它和Collection不同的是它存储的数据是以键值对的形式存在,
其中键也叫做key,值是value.比如上图中. 1表示start,2表示stop.Map存储的数据就是这么个形式
Map怎么用?
首先Map是一个接口,因此要用它的话就得创建它的实现类
Map常用的实现类是HashMap和TreeMap
1,HashMap存储数据
用这种存储数据的类无非就是要会用它们进行数据的增删改查,这是基础操作
Map map = new HashMap();
map.put(1,"stop");//往map添加数据,左边是key,右边是value
map.put(2,"start");
Object o = map.get(1);//从map取出数据,根据key取出value-->这边取出的值就是stop
map.remove(1);//从map删除数据,根据key删除数据.这边就把key为1的那一组键值对删除
map.replace(2,"stop");//从map修改数据,根据key修改对应的值
这样一个map的增删改查就完成了
HashMap的基础使用步骤
1,创建一个HashMap对象
2,使用put(key,value)来存储数据
3,使用get(key)取出数据,根据key取出对应的值
4,map.remove(key)根据key删除数据
5,map.replace(key,value)根据key修改数据.
这样Map的基本增删改查就完成了
TreeMap也是同样的用法。
Map的遍历
Map存储的数据是键值对类型的。这样的要如何遍历呢?
Map的遍历方式有3种,之后jdk8还新增了1种.这边就不说了
1,使用keySet()方法遍历key,在根据key遍历出对应的value
public static void main(String[] args) {
Map<Integer,String> map = new HashMap();
map.put(1,"stop");
map.put(2,"start");
for (Integer key: map.keySet()) {
//遍历key然后在根据key对应的遍历出value
System.out.println("键:"+key+",值:"+map.get(key));
}
}
foreach里面的遍历体是map.keySet(),元素是key,类型和key一致.当然Object也可以
结果是:
键:1,值:stop
键:2,值:start
这个方法最简单,但是这样的遍历方式很少使用.因为效率问题。
2,使用entrySet()把键值对一起遍历出来,然后用getKey()和getValue()方法取出key,value
Map<Integer,String> map = new HashMap<>();
map.put(1,"stop");
map.put(2,"start");
for (Map.Entry<Integer, String> entry : map.entrySet()) {
//定义的Map.Entry里的泛型和定义的Map保持一致
//使用entrySet()把键值对一起遍历出来,然后在用遍历出来的元素的getKey(),getValue()方法取出key,value
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
这种遍历方法是把key,value按成对的形式遍历出来.foreach种遍历体是map.entrySet(),
元素类型是Map.Entry<Integer, String>这个类型记住.泛型和定义的Map保持一致。是什么就是什么,不能写Object来代替。除非定义的map泛型是Object.
entrySet()遍历是用的最多的一个Map遍历方式.也是最推荐使用的遍历方式
如果这个Map没有定义泛型,那就不能用这个方式遍历
Map map = new HashMap<>();
map.put(1,"stop");
map.put(2,"start");
for (Object entry : map.entrySet()) {
//这种情况你没办法直接取出key和value
System.out.println(entry)
}
所以对于集合框架的使用,要习惯的写上泛型,即便允许任意类型也写上Object
3,使用enrtySet()的Iterator遍历
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(1, "stop");
map.put(2, "start");
Iterator<Map.Entry<Integer,String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<Integer, String> next = iterator.next();
System.out.println("key="+next.getKey()+",value="+next.getValue());
}
}
解析一下,map.entrySet()方法实际上就是把Map的数据放到了一个Set<Map.Entry<K,V>>这个里面。所以就相当于是用Iterator遍历一个set
但是这个很少用.用起来还不如2方法方便
还有一个是使用map.value()方法遍历,但是这个只能遍历value不能遍历出key就不纳入其中之一了
总结:
1,Map是什么?
一个用来存数键值对的图
2,Map如何用?
最常用的是HashMap.如果需要让Map里的key按自定义排序.就使用TreeMap.但是这种场景还是很少的.
map的基本操作,增删改查.put,remove,replace,get四个方法