J2EE集合框架之Map

简介: J2EE集合框架之Map

J2EE集合框架之Map

1.什么是Map集合

1.1 概述:

  • Map是一种键值对(key-value)的集合,Map集合中每一个元素都包含一个键对象和一个值对象,其中键Key对象不允许重复,而值Value对象可以重复。
  • Map集合没有继承Collection接口,其提供的是key到value的映射,Map中不能包含相同的key值,每个key只能影射一个相同的value,key值还决定了存储对象在映射中的存储位置。

1.2 图解:

1.3 Map集合和Collection集合的区别:

  • 数据结构:Collection集合主要是由一组单一类型的对象构成,而Map集合是由键值对(key-value)构成的对象组成。
  • 元素的排序:Collection集合中的元素是无序的,而Map集合的键值对是按照某种顺序进行排列的。
  • 元素的访问方式:Collection集合只能按照特定的顺序依次读取元素,而Map集合可以通过键直接访问元素。
  • 元素的重复:Collection集合中允许有重复的元素,而Map集合不允许有重复的键。
  • 方法:Collection集合主要包括增加、删除、修改、查找等操作方法,而Map集合除此之外还包括获取键、获取值、获取键值对等相关方法。

**总结:**相比较两种集合类型,Collection集合更适合和与存储较为简单的数据对象,这样的话可以大大提高开发效率;而相对于Map集合更适合保存键值对(key-value)这种特殊形式的数据,对于这种特殊形式数据的话Map更方便。

2. Map集合的遍历方式:(未包括泛型)

2.1 先获取map集合的所有key再获取值

package com.YX.Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo1 {
  public static void main(String[] args) {
    Map map = new HashMap<>();
    map.put(1, "君易");
    map.put(2, "木易");
    map.put(3, "栀龍");
    // 1.先获取map集合的键,在获取值
    Set keyset = map.keySet();
    for (Object key : keyset) {
      System.out.println("key:" + key + ";value=" + map.get(key));
    }
  }
}

输出结果

2.2 得到map集合的映射关系

package com.YX.Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo1 {
  public static void main(String[] args) {
    Map map = new HashMap<>();
    map.put(1, "君易");
    map.put(2, "木易");
    map.put(3, "栀龍");
    // 2.得到map集合的映射关系
    Set entrySet = map.entrySet();
    for (Object object : entrySet) {
      Map.Entry entry = (Entry) object;
      System.out.println(entry.getKey() + ":" + entry.getValue());
    }
  }
}

输出结果:

3.Map集合的遍历方式:(包括泛型)

3.1 增强for循环遍历(foreach)

package com.YX.Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class Demo2 {
  public static void main(String[] args) {
    Map<Integer, String> map = new HashMap<>();
    map.put(1, "君易");
    map.put(2, "木易");
    map.put(3, "栀龍");
//    1.foreach遍历
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  }
}

输出结果

3.2 迭代器遍历iterator

package com.YX.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class Demo2 {
  public static void main(String[] args) {
    Map<Integer, String> map = new HashMap<>();
    map.put(1, "君易");
    map.put(2, "木易");
    map.put(3, "栀龍");
     1.foreach遍历
    // for (Map.Entry<Integer, String> entry : map.entrySet()) {
    // System.out.println(entry.getKey() + ": " + entry.getValue());
    // }
    // 2.迭代器遍历
    Iterator<Entry<Integer, String>> it = map.entrySet().iterator();
    while (it.hasNext()) {
      System.out.println(it.next());
    }
  }
}

输出结果

3.3 遍历键、值、或者键值对的集合:

package com.YX.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class Demo2 {
  public static void main(String[] args) {
    Map<Integer, String> map = new HashMap<>();
    map.put(1, "君易");
    map.put(2, "木易");
    map.put(3, "栀龍"); 
//    3.遍历键、值、或者键值对的集合:
//    可以使用Map集合的keySet()、values()、entrySet()方法获得键、值、或者键值对的集合,然后使用for-each循环或迭代器遍历。
    // 遍历键值对
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  }
}

输出结果

4. Map集合的基本使用(增删改查)

package com.YX.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class Demo3 {
  public static void main(String[] args) {
    Map<Integer, String> map = new HashMap<>();
    map.put(1, "君易");
    map.put(2, "木易");
    map.put(3, "栀龍");
    // 原来数据
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
      System.out.println(entry.getKey() + ": " + entry.getValue());
    }
    // 根据对应的键来覆盖对应的值。
    map.put(1, "俊逸");
    // 修改后的结果
    System.out.println("修改后的=======================================================================");
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
      System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  }
}

修改后输出集合的结果

package com.YX.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class Demo3 {
  public static void main(String[] args) {
    Map<Integer, String> map = new HashMap<>();
    map.put(1, "君易");
    map.put(2, "木易");
    map.put(3, "栀龍");
    // 原来数据
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
      System.out.println(entry.getKey() + ": " + entry.getValue());
    }
    // 根据对应的键来删除对应的数据。
    map.remove(1);
    // 删除后的结果
    System.out.println("删除后的=======================================================================");
    for (Map.Entry<Integer, String> entry : map.entrySet()) {
      System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  }
}

输出结果

5.Map集合的综合运用(统计字符串中的字符出现的次数)

package com.YX.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class Demo3 {
  public static void main(String[] args) {
    // 定义一个字符串
    String str = "fghjhbvsccsc";
    // 截取每一个字符到字符数组中
    char[] charArray = str.toCharArray();
    // 存放字符与出现次数对应关系的Map集合容器
    Map<Character, Integer> map = new HashMap<Character, Integer>();
    for (char c : charArray) {// foreach遍历字符数组
      Integer val = map.get(c);//定义变量代表出现次数
      if (val != null) {//判断次数不能为空
        map.put(c, val + 1);//如果字符重复了则该次数加1
      } else {
        map.put(c, 1);//如果字符没重复则次数默认为1。
      }
    }
//    遍历Map集合
    for (Entry<Character, Integer> entry:map.entrySet()) {
      System.out.println(entry.getKey()+"出现了"+entry.getValue()+"次");
    }
  }
}

显示结果

**总结:**先将一个字符串截取一个个的字符存储在字符数组中,然后定义一个Map集合存储对应的字符和出现的次数,其次遍历字符数组判断截取的每一个字符是否重复出现,如果有重复出现的则将次数+1,若没有则将次数默认设置为1。

目录
相关文章
|
3月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
3月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
4月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
4月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
4月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
4月前
|
存储
|
4月前
|
安全 Java
【Java集合类面试五】、 如何得到一个线程安全的Map?
如何得到一个线程安全的Map的方法包括:使用Collections工具类将Map包装为线程安全,使用java.util.concurrent包下的ConcurrentHashMap,以及不推荐使用性能较差的Hashtable。
|
4月前
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。
|
5月前
|
存储 安全 Java
Java基础之集合Map
【7月更文挑战第8天】Java中的Map集合以键值对方式存储数据,如`Map&lt;&quot;name&quot;, &quot;张三&quot;&gt;`。Map接口定义了存取、判断、移除等操作,包括`put`、`get`、`containsKey`等方法。HashMap是最常用的实现,基于哈希表,允许null键值,但不保证顺序。其他实现包括同步的Hashtable、处理属性文件的Properties、保持插入顺序的LinkedHashMap、基于红黑树的TreeMap、弱引用的WeakHashMap、并发安全的ConcurrentHashMap和针对枚举优化的EnumMap。
45 4
|
5月前
|
存储 Go 索引
GO 集合 map 使用总结
GO 集合 map 使用总结
39 0