【Map:多个键值对的集合】

Map:多个键值对的集合

Map的实现类包括:
HashMap
TreeMap
Hashtable
Properties

1.整体架构流程

例如:
在语言模型中,编码器和解码器都是由一个个的 Transformer 组件拼接在一起形成的。

2.Map

键值对<key,value>:映射关系,一一对应:一个key只能对应一个value
        key是唯一的,无序的   --->Set
        value值可重复的,无序的   --->Collection
        去重 : key相同,value覆盖

2.1常用方法

* V put(K key, V value)
* void clear()
* map.clear();
* boolean isEmpty()
* boolean containsKey(Object key)
* boolean containsValue(Object value)
* V get(Object key)-------返回指定键映射到的值,如果此映射不包含该键的映射,则返回null 。
* static <K, V> Map<K,V> of(K k1, V v1, K k2, V v2)-----返回包含两个映射的不可修改映射。
* V remove(Object key) ------如果存在,则从此映射中删除键的映射(可选操作)
* default V replace(K key, V value)
* default boolean replace(K key, V oldValue, V newValue)
* int size()

2.2 遍历方式 :

1.values() 获取所有键值对的值
        2.keySet() 返回所有键值对的key
        3.Set<Map.Entry<K,V>> entrySet() 返回此地图中包含的映射的Set视图。
		///1.values()方法遍历map,得到value
        Collection<String> value = map.values();
        for(String values:value){
            System.out.println(values);
        }

        2.keySet()方法遍历map,得到key
        Set<Integer> keys = map.keySet();
        for(Integer key:keys){
            System.out.println(key);
        }
        ///3.Set<Map.Entry<K,V>> entrySet() 返回此地图中包含的映射的Set视图。
        Set<Map.Entry<Integer,String>> entrys = map.entrySet();
        for(Map.Entry<Integer,String> entry:entrys){
            System.out.println(entry.getKey()+"----->"+entry.getValue());
        }

3.TreeMap

有新增方法: TreeMap<k,v> tree = new TreeMap<>();

3.1新增方法

*ceilingKey---返回大于或等于给定键的最小键,如果没有这样的键,则null 
*ceilingEntry(K key)---返回与大于或等于给定键的最小键关联的键值映射,如果没有这样的键,则null 。 
*floorKey(K key)---返回小于或等于给定键的最小键,如果没有这样的键,则null 
*floorEntry(K key)---返回小于或等于给定键的最小键,如果没有这样的键,则null 
*higherEntry(K key) ---返回与严格大于给定键的最小键关联的键值映射,如果没有这样的键,则null 。
*higherKey(K key) ---返回严格大于给定键的最小键,如果没有这样的键,则返回null 。
*lowerEntry(K key)---返回与严格小于给定键的最大键关联的键值映射,如果没有这样的键,则null 。
*lowerKey(K key)---返回严格小于给定键的最大键,如果没有这样的键,则返回null 
*firstEntry()---返回与此映射中的最小键关联的键值映射,如果映射为空,则null 。
*K firstKey()---返回此映射中当前的第一个(最低)键。
*lastEntry()---返回与此映射中最大键关联的键值映射,如果映射为空,则null 。
*lastKey()---/返回此映射中当前的最后一个(最高)键。
*pollFirstEntry()---删除并返回与此映射中最小键关联的键值映射,如果映射为空,则null 。
*pollLastEntry()---删除并返回与此映射中最大键关联的键值映射,如果映射为空,则null 。

3.2 排序

3.2.1.内部比较器
3.2.2 外部比较器
TreeMap<Double,String> tree = new TreeMap<>();
        Teacher tea = new Teacher("a","Math");
        Teacher tea2 = new Teacher("b","IT");
        TreeMap<Teacher,String> tree1 = new TreeMap<>();
        tree1.put(tea, tea.getType());
        tree1.put(tea2, tea2.getType());
        System.out.println(tree1);
        //----------内部
        TreeMap<Teacher,String> tree2 = new TreeMap<>((o1, o2)->
         o1.getType().compareTo(o2.getType()));
        tree2.put(tea, tea.getType());
        tree2.put(tea2, tea2.getType());
    }
}
class tem implements Comparator<Teacher>{

    @Override
    public int compare(Teacher o1, Teacher o2) {
        return o1.getType().compareTo(o2.getType());
    }
}
class Teacher implements Comparable<Teacher>{
    private String name;
    private String type;
    public Teacher(){}
    public Teacher(String name, String type) {
        this.name = name;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                '}';
    }

    @Override
    public int compareTo(Teacher o) {
        return this.type.compareTo(o.type);
    }
}

4.HashMap

Map<Integer,String> map = new HashMap<>();

4.1常用方法同Map

		Map<Integer,String> map = new HashMap<>();
        map.put(01,"a");
        map.put(02,"b");
        map.replace(01,"c");//key 不变,替换value
        System.out.println(map);
        System.out.println(map.containsKey(01));
        System.out.println(map.containsValue("c"));
        Map map1=Map.of(03,"d",04,"e");//不可变
        System.out.println(map1);
        System.out.println(map.size());
        map.replace(01,"c","g");
        System.out.println(map);

5.Hashtable

5.1与HashMap区别:

计算hash值方式不同继承自父类允许null键null值线程安全/ 同步问题初始容量扩容机制
HashMapjava.util.AbstractMap<>一个key只能有一个null,一个value可以多个null不安全/不同步初始容量16/由构造器指定扩容临界值12(16*0.75),每次扩容为原容量2倍/由构造器指定
Hashtablejava.util.Dictionary<>不可以安全/同步初始容量11/由构造器指定每次扩容为原容量2倍+1/由构造器指定
不建议使用Hashtable。

6.Properties :

    Properties类表示一组持久的属性。可以保存到流中或从流中加载。
    属性列表中的每个键及其对应的值都是一个字符串。
    
通过Properties实现从配置文件中读取键值对数据 :
    1.定义配置文件.properties,存储键值对数据
    2.java中构建Properties对象
    3.将Properties对象调用load与输入流建立联系
    4.通过getProperty根据key获取value值实现从配置文件中读取键值对数据
// 读写操作
 Properties properties = new Properties();
       properties.setProperty("1","a");
       properties.setProperty("2","b");
       properties.setProperty("3","c");
       System.out.println(properties);
       System.out.println(properties.get("1"));
       //输出流,输出(写)键值对数据到文件.properties中,store()
      OutputStream output =new BufferedOutputStream(new FileOutputStream("src//entry.properties"));
       properties.store(output,"注释");
       output.flush();
       output.close();
       ///将文件中键值对数据读到程序中,load()
       properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("entry.properties"));
       System.out.println(properties.getProperty("1"));//当前线程的properties文件

       InputStream input = new BufferedInputStream(new FileInputStream("D://2//1.properties"));
       properties.load(input);
       System.out.println(properties.getProperty("1"));
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值