HashMap简单入门(一)

HashMap

回顾HashMap之前我们先回顾一下Map

补充:把Collection集合称为单列集合。Map被称为双列集合。

Map集合的特点

public interface Map<K,V>

特点:

1)Map集合可以一次性存储两个对象;

2)在Map集合中保存的key和value这样的具备一定对应关系的一组(一对)数据,Map集合中存储的是两个对象的对应关系(映射关系)。[ key-value映射关系 ];

3)Map集合中的key必须保证唯一(存储的key元素不能重复,value可以重复,但是一个key只能对应一个value);

4)Map集合中的key和value属于一一对应关系(一个key只能对应一个value)

Map和Collection的区别:

区别:

​ 1)Map中键唯一,值没有要求。Collection中只有Set体系要求元素唯一;

​ 2)Map的数据结构针对键而言,Collection的数据结构针对元素而言;

​ 3)Map是双列集合顶级接口,Collection是单列集合顶级接口,他们两个分别是两种集合的顶级接口,之间没有必然的联系;

说明:

Collection集合中只能存储一个对象元素,称为单列集合。

Map集合中其实存储的是两个单列集合,称为双列集合。

map底层哈希表简单理解(点)

Map接口中的常用方法

Map接口中定义了很多方法,常用的如下:

 1)增加元素:

  • public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。

    说明:

    ​  在使用put存储一对元素(key-value)对象时,会先拿key去判断Map集合中是否已经存在。

    如果Map集合中没有相同的key存在:就把key-value存储到Map集合中,并返回null值。

        如果Map集合中有相同的key存在:会把之前存储的value对象覆盖。并返回之前的value对象(旧value对象)。

     这里可以理解为修改value,但是不能修改key。

    注意:由于Map是接口,不能创建对象,只能使用Map下面的子类HashMap创建对象。

分析和步骤:

1)创建集合HashMap<String,String>集合对象map,返回值类型是Map<String,String>;

2)使用map对象调用put函数向集合中添加学生的学号作为key,姓名作为value;

3)输出对象map;

   /*
* Map中的put函数的演示
*  V put(K key, V value) 
         将指定的值与此映射中的指定键关联(可选操作)。 
*/
   public class MapPutDemo {
       public static void main(String[] args) {
           // 创建集合对象
           Map<String, String> map = new HashMap<String,String>();
           //给集合中添加数据
           map.put("001","张三");
           map.put("002","李四");
           map.put("003","王二");
           map.put("004","麻子");
           map.put("005","王五");
           map.put("006","麻子");
           String name = map.put("006","老麻子");
           //输出集合中的数据
           System.out.println(map);
           System.out.println(name);
       }
   }

删除元素:

  • public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。

    说明:

    ​ remove是根据key删除当前key对应的value这一组数据:

       如果Map集合中有与指定的key相同的元素存在:则删除一对key-value对象,而不是只删除value,并返回删除这组的value值;

       如果Map集合中没有与指定的key相同的元素存在:没有删除操作,返回null;

    问题:为什么不可以通过value来删除一组数据?

    因为key是唯一的,而value可以有多个,所以不能通过value来删除一组数据,只能通过key值进行删除。

  • 清空集合。void clear()

分析和步骤:

1)创建集合HashMap<String,String>集合对象map,返回值类型是Map<String,String>;

2)使用map对象调用put函数向集合中添加学生的学号作为key,姓名作为value;

3)使用map对象调用remove函数根据键key=004进行删除键值对,并使用String类型接收返回值value

4)输出对象map和删除的返回值value;

5)使用对象map调用clear()函数清除Map集合中的元素数据;

/*
 * Map中的remove函数的演示
 *   V remove(Object key) 
          如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。 
 */
public class MapRemoveDemo {
    public static void main(String[] args) {
        // 创建集合对象
        Map<String, String> map = new HashMap<String,String>();
        //给集合中添加数据
        map.put("001","张三");
        map.put("002","李四");
        map.put("003","王二");
        map.put("004","麻子");
        map.put("005","王五");
        map.put("006","麻子");
        //调用remove函数删除key为004的键值对组合
        String value = map.remove("004");//返回删除key为004的value值麻子
        //输出集合中的数据
        System.out.println(map);
        System.out.println(value);
        //调用clear()函数清空map集合
        //注意清空指的是将map集合中的所有元素清空,集合还在,还可以使用集合对象向集合中添加数据
        map.clear();
        System.out.println(map);
        map.put("009", "黑旋风");
        System.out.println(map);
    }
}

3)获取集合中的元素:

  • public V get(Object key) 根据指定的键,在Map集合中获取对应的值。

    说明:

    根据指定的key元素对象,去 Map集合获取相应的value对象。

        如果Map集合中没有指定的key元素存在,则返回null。

    注意:获取也只能根据key获取value,不能通过value获取key。

    分析和步骤:

    1)创建集合HashMap<String,String>集合对象map,返回值类型是Map<String,String>;

    2)使用map对象调用put函数向集合中添加学生的学号作为key,姓名作为value;

    3)使用map对象调用get函数根据键key=003获取value值,并使用String类型接收返回值value;

    4)使用map对象调用get函数根据键key=007获取value值,并使用String类型接收返回值value1;

    5)输出对象map和获得的value、value1;

 /*
* Map中的get函数的演示
*   V get(Object key) 
         返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。 
*/
 public class MapGetDemo {
     public static void main(String[] args) {
         // 创建集合对象
         Map<String, String> map = new HashMap<String,String>();
         //给集合中添加数据
         map.put("001","张三");
         map.put("002","李四");
         map.put("003","王二");
         map.put("004","麻子");
         map.put("005","王五");
         map.put("006","麻子");
         //通过集合对象调用get函数根据key获取value值
         String value = map.get("003");
         String value1 = map.get("007");
         //输出集合中的数据
         System.out.println(map);
         System.out.println(value);
         //由于集合中没有key为007的数据,所以返回null
         System.out.println(value1);
     }
 }

其他方法:

  • public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。

  • int size()获取Map集合中存储的key-value对应关系的个数。获取集合长度。

分析和步骤:

​ 1)创建集合HashMap<String,String>集合对象map,返回值类型是Map<String,String>;

​ 2)使用map对象调用put函数向集合中添加学生的学号作为key,姓名作为value;

​ 3)使用map对象调用size()函数获取map集合中键值对个数,并输出结果;

​ 4)使用map对象调用values()函数获取map集合中value值的个数,使用Collection集合进行接收并遍历输出结果;

​ 5)使用map对象调用keySet()函数获取map集合中key值的个数,使用Set集合进行接收并遍历输出结果;

/*
 * Map中的其他函数讲解
 */
public class MapOtherFunctionDemo {
    public static void main(String[] args) {
        // 创建集合对象
        Map<String, String> map = new HashMap<String,String>();
        //给集合中添加数据
        map.put("001","张三");
        map.put("002","李四");
        map.put("003","王二");
        map.put("004","麻子");
        map.put("005","王五");
        map.put("006","麻子");
        //返回map集合中的键值对的个数
        int size = map.size();
        System.out.println(size);
        //获取map集合中的所有键集合
        Set<String> keys = map.keySet();
        //遍历set集合
        for (String key : keys) {
            System.out.println(key);
        }
    }
}

Map集合的遍历

针对Collection集合,它的遍历可以使用Iterator迭代器进行遍历。

但是Map集合不能直接使用Iterator迭代器来遍历,因为在Map集合根本就没有提供获得迭代器对象的函数。

既然不能通过Iterator迭代器直接来遍历,那是否可以间接使用Iterator迭代器来遍历Map集合呢?

  之前讲Map集合时,Map集合是用来存储一对key-value两个对象,既然存储的是两个对象,那么能不能只获取其中一个所有的对象?

可以。Map集合属于双列集合,里面有两个单列集合。由于Map集合中的key是唯一的,所以我们我可以先获取Map集合中的key,然后根据key值来获取Map集合中的value值。

 问题1:Map中的key对象,应该使用哪个集合存储?

     key必须保证唯一性(不能重复),使用Set集合存储。

问题2:如何将Map中的key存储到Set集合呢?

可以使用Map中的keySet方法:获取Map集合中所有的key对象并存储到Set集合中。

public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。

这样通过上述操作就可以将Map集合中的key存放到Collection集合下面的set中,然后使用Iterator遍历Map集合中的key所在的Set集合,进而可以使用 Map集合中的 public V get(Object key) 通过key间接的获取每个value。

注意:Map接口中提供了2个方法可以获取到Map中的key 或者key和value关系对象

keySet():Map中的key存储到Set集合中。

entrySet():Map中的key和value关系对象存储到Set集合中。

注:由于Map中key是唯一的,不能重复的,所以Map集合中键值对整体也是不能重复的,但是单独value值是可以重复的。

/*
 *     使用keySet函数遍历Map集合
 */
public class MapKeySetDemo {
    public static void main(String[] args) {
        // 创建集合对象
        Map<String, String> map = new HashMap<String,String>();
        //向集合中添加数据
        map.put("李晨","范冰冰");
        map.put("邓超","孙俪");
        map.put("文章","马伊琍");
        map.put("汪峰","章子怡");
        /*
         * 通过Map的对象调用keySet函数获得Map中的key值并保存到Set集合
         * 所有的key键都保存到以下的set集合中了
         */
        Set<String> keys = map.keySet();
        //使用迭代器迭代Set集合
        for (Iterator<String> it = keys.iterator(); it.hasNext();) {
            //分别取出每个key值
            String key = it.next();
            //使用Map的对象调用get函数根据key获得value
            String value = map.get(key);
            //输出key和value
            System.out.println(key+"===="+value);
        }
    }
}

使用entrySet遍历

分析和步骤:

1)创建Map集合对象map;

2)使用集合对象map调用put函数向集合中添加几个数据,丈夫作为key,妻子作为value;

3)使用集合对象map调用entrySet函数获取Map集合中所有的key和value对应关系的对象,把所有的对应关系的对象保存到Set集合中,并获取对象keyValues;

4)使用迭代器Iterator来对Set集合中的的对应关系的对象keyValues进行迭代,使用迭代器对象it调用next()函数来获取单个独立的key-value对应关系对象keyValue;

5)然后使用keyValue对象调用Map.Entry中的getKey()和getValue()函数来获得每个对应关系对象中的key和value,最后输出key和value值;

  /*
   * 使用Map集合中的entrySet函数遍历集合
   */
  public class MapEntrySetDemo {
      public static void main(String[] args) {
          // 创建集合对象
          Map<String, String> map = new HashMap<String,String>();
          //向集合中添加数据
          map.put("李晨","范冰冰");
          map.put("邓超","孙俪");
          map.put("文章","马伊琍");
          map.put("汪峰","章子怡");
          /*
           * 使用entrySet()函数获得键值对对应关系的对象
           * KeyValues表示键值的对应关系的对象
           */
          Set<Map.Entry<String, String>> keyValues = map.entrySet();
          //迭代Set集合 
          /*
           * Iterator<Map.Entry<String, String>> 表示每次迭代出来的是Map.Entry类型,
           * 并且对应关系对象中的key和value都是String类型
           */
/*for (Iterator<Map.Entry<String, String>> it = keyValues.iterator(); it.hasNext();) {
   Map.Entry<String, String> keyValue =  it.next();
   //keyValue表示每个独立的key-value对应关系的对象,现在分别取出对应关系中的key和value
   String key = keyValue.getKey();
   String value = keyValue.getValue();
   //输出key和value
   System.out.println(key+"---"+value);
}*/
          //使用foreach循环遍历Set集合
          for (Map.Entry<String, String> keyValue : keyValues) {
              /*
               * keyValue表示单个独立的映射关系对象,现在分别取出对应关系中的key和value
               */
              String key = keyValue.getKey();
              String value = keyValue.getValue();
              //输出key和value
              System.out.println(key+"。。。。"+value);
          }
      }
  }

HsshMap简单入门二

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值