黑马程序员技术交流社区

标题: Java中的Map集合 [打印本页]

作者: 逆风TO    时间: 2020-3-3 17:19
标题: Java中的Map集合
1 Map双边队列
1.1 什么是Map
键(Key)值(Value)对

比如:表格:
   键   :值
   姓名:嘟嘟
   年龄:16
   性别:男

程序开发大部分数据都是键值对形式的
   MySQL JSON XML 类对象成员变量和存储的数据
   从前端发送的数据也可以转成Map格式 ==> 一键生成 ==> 类对象 ==> 一键存储 ==> 数据库

interface Map<K, V>
–| class HashMap<K, V> 哈希表结构(可查看本博客的set集合)
–| class TreeMap<K, V> 底层是树形结构,存储要求K有对应的排序方式
   Map双边队列中键(Key)是唯一的,但是值(Value)可以重复

1.2 Map<K, V>双边队列方法
增:
   put(K k, V v);
      存入一个键值对类型,K和V都要符合泛型约束
   putAll(Map<? extends K, ? extends V> map);
      存入另一个Map双边队列,并且要求添加的Map双边对接中的K和V都要和当前Map中存储的K和V一致
删:
   remove(Object k);
      删除对应K的键(Key)值(Value)对
改:
   put(K k, V v);
      对应当前K存在,修改对应内容
查:
   int size();
      当前Map双边队列中,有效键值对个数
   boolean isEmpty();       
      是否为空
   boolean containsKey(Object key);
      判断指定的Key是否存在
   boolean containsValue(Object value);
      判断指定Value是否存在
   Set<K>   keySet();
      返回整个Map双边队列中所有Key对应的Set集合
      【注意】一个方法使用set结尾,表示该方法返回的是一个集合类型,大多是情况下都
是Set类型
   Collection<V>   values();
      返回整个Map双边队列中所有Value对应的Collection集合
      【注意】方法名如果是一个复数,返回值类型集合或者是数组情况居多

1.3 EntrySet
**Entry 可以认为是键值对对象
定义在Map类内
[Java] 纯文本查看 复制代码
class Entry<K, V> {
                K k;
                V v;
        }

K,V是完全依赖于Map约束的,这里可以Entry里面保存的是每一个键值对类对象

Map中提供了一个方法
   Set<Entry<K, V>> entrySet
   返回值是键值对类对象Set集合
   Set集合中存储的是Entry类型
   Entry类型是带有泛型的

代码示例
[Java] 纯文本查看 复制代码
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo2 {
        public static void main(String[] args) {
                HashMap<String, String> map = new HashMap<String, String>();
               
                map.put("牛魔王", "铁扇公主");
                map.put("杨过", "小龙女");
                map.put("黄磊", "孙莉");
               
                Set<Map.Entry<String, String>> entrySet = map.entrySet();
               
                System.out.println(entrySet);
        }
}

[color=rgba(0, 0, 0, 0.75)]## 1.4 TreeMap

推荐使用Comparator接口
代码示例

[Java] 纯文本查看 复制代码
import java.util.Comparator;
import java.util.TreeMap;

public class Demo3 {
        public static void main(String[] args) {
                TreeMap<String,String> map = new TreeMap<String, String>();
               
                //默认按照字典顺序
                map.put("李四", "1");
                map.put("王五", "1");
                map.put("赵六", "2");
                map.put("张三", "2");
               
                System.out.println(map);
               
                //匿名内部类,重写方法
                TreeMap<Dog,String> map2 = new TreeMap<Dog, String>(new Comparator<Dog>() {

                        @Override
                        public int compare(Dog o1, Dog o2) {
                                return o1.getAge() - o2.getAge();
                        }
                });
               
                map2.put(new Dog("王可可", 1), "111");
                map2.put(new Dog("八公", 2), "111");
                map2.put(new Dog("小黄", 3), "111");
                map2.put(new Dog("小黑", 4), "111");
                map2.put(new Dog("旺财", 5), "111");
               
                System.out.println(map2);
               
        }
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2