Java map接口方法测试

Map是一种把键对象和值对象进行映射的集合,Map对象每次存储两个值,键值key和数值value,它们合起来称为键值对。

每个key最多对应一个value,其中key不可重复,一个Map对象的所有key值相当于一个set集合。

不同的key可以对应相同的value。

map接口方法测试

增: 

V put(K key, V value):插入键值对
void putAll(Map<? extends K,? extends V> m):复制指定的图的所有键值对到该对象
default V putIfAbsent(K key, V value):如果传入的key映射的value为空,则将传入的     value映射到此key,返回null;若不为空,则返回当前值。 
Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;

 

        Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;

        TreeMap<Integer,String> tree=new TreeMap<>() ;
        tree.put(1,"二傻子") ;
        tree.put(2,"two") ;
        tree.put(3,"three");
        map.putAll(tree);
        Set<Integer> key=map.keySet() ;
        for(Integer i:key){
            System.out.println(map.get(i));
        }


D:\Java\jdk\bin\java.exe 
二傻子
two
three

Process finished with exit code 0   

从上面可以看出,当key(1)存在映射value(“one”)时,旧的value(“one”)会被新存入的value(“二傻子”)覆盖

Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;

        System.out.println(map.putIfAbsent(2,"five"));
        System.out.println(map.putIfAbsent(1,"我爱你")+"\n");

        Set<Integer> key=map.keySet() ;
        for(Integer i:key){
            System.out.println(map.get(i));
        }

D:\Java\jdk\bin\java.exe 
null
one

one
five

Process finished with exit code 0

map集合的遍历

map集合主要由三种遍历方式

方法一:将map集合中的所有key值转换为一个set集合,通过set的迭代器或者forEach循环调用map的get方法实现遍历:

        Set<Integer> key=map.keySet() ;
        for(Integer i:key){
            System.out.println(map.get(i));
        }

 方法二:调用map的entrySet方法,将map中的所有键值对都转换为一个Set集合,其中Set集合的数据类型是map的一个内部类Entry<k,v>.如下。

    Set<Map.Entry<Integer,String>> set=map.entrySet();
    for(Map.Entry<Integer,String> i:set){
        System.out.println(i);
    }

方法三:通过forEach()遍历。 

Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");
        map.forEach((Key,value)->{
            System.out.println("["+Key+","+value+"]");
        });
D:\Java\jdk\bin\java.exe 
[1,one]
[2,two]
[3,three]

 感觉forEach最容易。

以上就是遍历方法啦,没有提到的欢迎提出哦。

 删:

void clear():清空集合中的所有键值对,不多说
V remove(Object key):如果存在key,则删除key和value,并返回value
default boolean remove(Object key, Object value):只有当key和value对应时才删除他们。

 

        Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");
        map.put(4,"four") ;
        map.put(5,"five") ;

        System.out.println(map.remove(2) );
        System.out.println(map.remove(7));

        Set<Map.Entry<Integer,String>> set=map.entrySet();
        for(Map.Entry<Integer,String> i:set){
            System.out.println(i);
        }
        Set<Integer> S=map.keySet() ;
        for(Integer i:S){
            System.out.print(i);
        }
D:\Java\jdk\bin\java.exe 
two
null
1=one
3=three
4=four
5=five
1345

Process finished with exit code 0

 以上代码,发现map的remove方法在删除value的同时会删除key值

        Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");
        System.out.println(map.remove(2,"222") );

        Set<Map.Entry<Integer,String>> set=map.entrySet();
        for(Map.Entry<Integer,String> i:set){
            System.out.println(i);
        }
        System.out.println("---------------");

        System.out.println(map.remove(2,"two"));
        Set<Integer> S=map.keySet() ;
        for(Integer i:S){
            System.out.println(map.get(i));
        }
false
1=one
2=two
3=three
---------------
true
one
three

改: 

default V replace(K key, V value):只有当key和value对应时才能替换它们

default boolean replace(K key, V oldValue, V newValue):只有当key和oldValue对应时才能用newValue替换oldValue.

default void replaceAll(BiFunction<? super K,? super V,? extends V> function):

将所有键值对的value按照指定函数变换为新的值.

        Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");
        
        map.replace(1,"111") ;

        Set<Map.Entry<Integer,String>> set=map.entrySet();
        for(Map.Entry<Integer,String> i:set){
            System.out.println(i);
        }

 感觉这个replace方法相当于如果存在key,就改变他的值,看来API文档后相当于

if (map.containsKey(key)){
    return map.put(key, value); 
} 
else return null; 

 第二个replace比较直观

Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");

        boolean b1= map.replace(1,"one","111") ;
        boolean b2=map.replace(2,"twoo","222") ;
        System.out.println(b1+"  "+b2);

        Set<Map.Entry<Integer,String>> set=map.entrySet();
        for(Map.Entry<Integer,String> i:set){
            System.out.println(i);
        }
D:\Java\jdk\bin\java.exe
true  false
1=111
2=two
3=three

Process finished with exit code 0

replaceAll()

Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");

        //将所有的value都转换为大写
        map.replaceAll((Key,value)->value.toUpperCase());

        Set<Map.Entry<Integer,String>> set=map.entrySet();
        for(Map.Entry<Integer,String> i:set){
            System.out.println(i);
        }
D:\Java\jdk\bin\java.exe 
1=ONE
2=TWO
3=THREE

Process finished with exit code 0

 (key, value) -> do 是匿名函数 lambda 表达式,do主要写改变的函数,当然只能改变value,就记住这样搞.

接下来是最牛的forEach()

        map.forEach((Key,value)->{
            //key变为原来的平方,value变为大写,并打印key和value。
            Key=Key*Key;
            value=value.toUpperCase() ;
            System.out.println("["+Key+","+value+"]");
        });
D:\Java\jdk\bin\java.exe 
[1,ONE]
[4,TWO]
[9,THREE]

Process finished with exit code 0

 不知道的点就是forEach该咋写,格式forEach((key,value)->{  });

查: 

V get(Object key) 如果key有value,返回value,无则返回null。
boolean isEmpty() 判空,没有键值对返回true。
boolean containsKey(Object key):如果此key存在,则返回 true 。
boolean containsValue(Object value):如果存在指定的value,则返回 true 。
int size() 返回此集合中键值对的数量。
boolean equals(Object o):比较相等于,不多说
int hashCode() 返回此地图的哈希码值。

重点测试下面几个:
Set<Map.Entry<K,V>> entrySet():返回此地图中包含的映射的Set视图。
Set<K> keySet(): 返回此地图中包含的键的Set视图。
Collection<V> values():将该map对象的所有value存储在一个Collextion对象中,并返回。

default V getOrDefault(Object key, V defaultValue):如果存在key,则返回相应的value,不存在则返回defaultValue默认值。

entrySet()和keySet()主要用于遍历,前面已经提到

        Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");

        Set<Map.Entry<Integer,String>> set=map.entrySet();
        for(Map.Entry<Integer,String> i:set){
            System.out.println(i);
        }

        Set<Integer> S=map.keySet() ;
        for(Integer i:S){
            System.out.println(map.get(i));
        }
D:\Java\jdk\bin\java.exe
1=one
2=two
3=three
one
two
three

Process finished with exit code 0

 Collection<V> values()

Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");

        Collection<String> values=map.values() ;
        Iterator it=values.iterator() ;
        while (it.hasNext()){
            System.out.println(it.next());
        }
D:\Java\jdk\bin\java.exe 
one
two
three

Process finished with exit code 0

方法getOrDefault(Object key, V defaultValue) 

        Map<Integer,String> map=new HashMap() ;
        map.put(1,"one") ;
        map.put(2,"two") ;
        map.put(3,"three");
        System.out.println(map.getOrDefault(1,"not found that key"));
        System.out.println(map.getOrDefault(4,"not found that key"));
        
        Set<Map.Entry<Integer,String>> set=map.entrySet();
        for(Map.Entry<Integer,String> i:set){
            System.out.println(i);
        }
D:\Java\jdk\bin\java.exe 
one
not found that key
1=one
2=two
3=three

发现如果没有指定的key,getOrDefault并不会将默认值写入,只是返回一下。

以上内容有错误的地方欢迎提出。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值