Java笔记:双列集合框架

Map集合

Map接口下的集合与Collection接口下的集合存储数据的形式不同。

  • Collection中的集合是孤立存在的
  • Map中的集合元素是成对存在的

    Map中的集合不能包含重复的键,但是值可以重复,每个键对应一个值

Map接口中的常用方法

  • public V put(K key,V value):把指定的键与指定的值添加到Map集合中
  • public V remove(Object key):把指定的键值对元素从Map集合中删除,返回被删除的元素的值
  • public V get(Object key) :根据指定的键,从Map集合返回对应的值
  • public Set<K> keySet() :获取Map集合中所有的键,存储到Set集合中
  • public Set<Map.Entry<K,V>> entrySet() :获取Map集合中所有的键值对对象的集合

    Map接口方法演示

public class MapDemo{
    public static void main(String[] args){
        //创建Map对象
        HashMap<String,String> map = new HashMap<>();
        //添加元素
        map.put("杨过","小龙女");
        map.put("伊利丹","一粒蛋");
        System.out.println(map);
        //移除元素
        System.out.println(map.remove("杨过"));
        //查询元素
        System.out.println(map.get("伊利丹"));
    }
}

tips:
使用put方法时,若指定的键不存在于集合中,则返回null并且将指定的键值放入集合
若指定的键已经存在于集合中,那将会用新值替换旧值并返回旧值

Map集合遍历方式

主要通过各值所对应的键来找寻
步骤:
1.利用keySet()方法,获取Map中所有的键组成的Set集合
2.遍历键的Set集合,获取每一个键
3.利用Map集合get()方法,传入每一个键以获取对应的值
代码:

public class MapDemo01{
    public static void main(String[] args){
        //创建一个Map集合对象
        HashMap<String,Integer> map = new HashMap<>();
        map.put("卢来佛祖",513);
        map.put("孙悟空",0);
        map.put("八戒",1111);

        //获取所有的键
        Set<String> set = map.keySet();
        //遍历键集合
        for (String key : set){
            Integer i = map.get(key);
            System.out.println(key + "=" + i);
        }
    }
}

Entry键值对对象
Map集合中存放了两种对象,一种成为键,另一种为值,在Map他们时一一对应的,而这一对对象又被称为Map中的一个Entry,Entry将键值对的对应关系封装成了对象,即键值对对象,如此在遍历Map的时候也可以从每一个键值对对象中获取键与对应的值
键值对相关方法

  • public K getKey():获取Entry对象中的键
  • public V getValue():获取Entry对象中的值
    Map集合中也提供了获取键值对对象的方法
  • public Set<Map.Entry<K,V>> entrySet():获取Map集合中所有的键值对对象的集合
    Map集合遍历键值对对象
    可以通过遍历集合中的每个键值对对象,获取对应的键与值
    步骤:
    1.获取Map集合中所有的键值对对象
    2.遍历此键值对对象的Set集合,获取每一个键值对对象
    3.调用键值对对象的方法获取其键与值
public class MapDemo02{
    public static void main(String[] args){
        //创建一个Map集合对象
        HashMap<String,Integer> map = new HashMap<>();
        map.put("卢来佛祖",513);
        map.put("孙悟空",0);
        map.put("八戒",1111);

        //获取所有键值对对象
        Set<Entry<String,Integer>> entrySet = map.entrySet();
        //遍历每一个键值对对象
        for (Entry<String,Integer> entry : entrySet){
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + "=" + value);
        }
    }
}

tips:
Map集合不能直接使用迭代器或者增强for遍历,但是利用其键值对对象Set集合或者键的Set集合就可以遍历了
当HashMap中存储自定义类型的对象时,为了保证键唯一,需要重写该类的hashCode()和equals()方法
如要保证Map中存取键值一致,则可以使用LinkedHashMap集合存放

JDK9对集合添加的优化

java9中添加了几种集合工厂方法,可以更方便地创建少量元素的集合。
新的List,Set,Map的静态工厂方法可以更方便地创建集合的不可变实例
例子

public class HelloJDK9{
    public static void main(String[] args){
        Set<Integer> set = Set.of(1,3,5,7,9);
        Map<String,Integer> map = Map.of("a",1,"b",3);
        List<String> list = List.of("v","e","r");
    }
}

注意事项
1.of()方法只是Map,List,Set三个接口的静态方法,其父类和子类实现没有这类方法
2.返回的集合是不可变的

猜你喜欢

转载自blog.csdn.net/FallingSkies/article/details/81977975
今日推荐