集合--Map篇

简介: 集合--Map篇



一,Map集合的概述及特点

1.1 概述:

  1. Map集合是一种双列集合,每个元素包含两个数据。
  2. Map集合的每个元素的格式:key=value(键值对元素)。
  3. Map集合也被称为“键值对集合”。

1.1.1Map集合体系图

说明:

  1.   Map集合中HashMap是使用最多的
  2.   HashTable相比HashMap线程安全  且jdk1.8以下存储值不能为null值

1.2特点:

Map集合的特点都是由键决定的。
Map集合的键是无序,不重复的,无索引的,值不做要求(可以重复)。
Map集合后面重复的键对应的值会覆盖前面重复键的值。
Map集合的键值对都可以为null。

 

Map集合实例:    

package com.LiuBing;
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集合
       map.put("name", "小王");//添加数据
       map.put("age", 55);
       map.put("sex", "男");
//         map.put("a", 1);
//         map.put("b", 2);
//         map.put("c", 3);
       System.out.println(map);//输出
       Object remove = map.remove("name");//删除 返回的是键对应的值
       System.out.println(remove);
       map.put("sex", "女");//修改 采用的也是put方法 覆盖之前键值对内容
       System.out.println(map);
       System.out.println(map.get("age"));//单条键查询  返回value
  }      
}

运行控制台输出:

二,Map遍历方式(两种)

2.1实现方式:

2.1.1第一种KeySet:

(1)使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合

(2)遍历set集合,获得Map集合中的每一个key

(3)通过Map集合中的方法get(key),通过key找到value

2.2.1第二种entrySet:

(1)Map.entrySet()把map的键值映射成Set集合

(2)Map.entrySet迭代器会生成EntryIterator,其返回的实例是一个包含key/value键值对的对象

(3)getKey(): 返回键值对的key

(4)getValue(): 返回键值对的value

Map两种遍历方式案例:

package com.LiuBing;
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集合
       map.put("name", "小王");//添加数据
       map.put("age", 55);
       map.put("sex", "男");
       //两种遍历方式
       //遍历方式1 根据所有key拿值  
       Set keySet = map.keySet();
         for (Object key : keySet) {
      System.out.println("键:"+key+"值:"+map.get(key));
    }
         //方式二 映射遍历
         Set entrySet = map.entrySet();
         for (Object object : entrySet) {
      Map.Entry entry= (Entry) object;
      System.out.println(entry.getKey()+":"+entry.getValue());
    }
  }      
}

运行控制台输出:

三,字符串出现次数

  实现步骤:

1 将字符串转为字符数组

2 遍历字符数组且定义一个HashMap集合

3 将字符数组保存到map集合中 返回Integer

4 判断value

5 如果value值为空 默认给该集合值为1   反之value值叠加1(覆盖形式)

6 最后再遍历Map集合

代码实现:

package com.LiuBing;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo2 { 
  public static void main(String[] args) {
     String str ="qwertyuuytrewqwertyhsafqgrhwqe54tefrfqrtqfgaffffff";//定义一个字符串
          char[] charArray= str.toCharArray();//转成一个数组容器 
          Map<Character,Integer> map= new HashMap<>();//定义一个Map集合 
          for (char c : charArray) {//遍历字符数组 
        Integer value = map.get(c);
        //如果集合中的键存在和该字符一样的值,那么就在原有的值上加1,覆盖掉原来的键值
        if(value==null) {//判断如果值等于空
          map.put(c, 1);//默认为一
        }else {//否则
          map.put(c, value+1);//将值加1
        }
      }
         //Entry遍历
          Set<Entry<Character, Integer>> entrySet = map.entrySet();
          for (Entry<Character, Integer> entry : entrySet) {
                 System.out.println(entry.getKey()+":"+entry.getValue());
      }
  }
}

控制台运行输出:

四,泛型

4.1概述

   (1)编写代码时使用类型参数来表示不同的数据类型。通俗地说,泛型就是将不同类型的数据通用化,可以在同一个类或方法中实现对不同数据类型的操作。

   (2)将不必要的控制台异常代码,换做编译时的代码错误,提高代码的健壮性,小部分提高   代码效率

4.1.1不加泛型的操作使用:

实操代码:

    会发现以上代码没有系统报错,大多数人以为没有问题,但是一运行就会异常报错(下图)

    因为数据中有字符串,无法转型,那为什么不在编译就提示有代码问题出来呢?

这就体现出泛型应用了,也在上方泛型的概述中提到过将不同类型的数据通用化,

4.1.2加泛型的操作使用:

实操代码:

public class Demo3 { 
  public static void main(String[] args) {
       HashSet<Integer> set =new HashSet<>();//定义一个Set集合
       set.add(1);
       set.add(2);
       set.add(3);
       set.add(4);
       set.add(5);
       set.add(6);
//       set.add("Java很nice"); //此行数据不能添加  因泛型的指定只能插入指定的类型数据  17行
          for (Object object : set) {//遍历set
      if(Integer.valueOf(object.toString())!=0) {
      System.out.println(object);
    }
  }
  }
}

运行台输出:

    说明: 会发现在集合后面加了一个指定的数据类型,这就是泛型,将操作的数据类型统一化只能操作你指定的数据类型,并且操作其他的数据类型会报出编译时的错误,而加泛型的使用则不会

五,工具类的使用

5.1Collections方法使用

    Collections中的一些方法需要实现自然排序接口进行排序

   sort(List );根据元素的自然排序对指定的List集合元素按升序排序  

   常见的方法:

  1. 排序 : sort()
  2. 查找 : binarySearch()
  3. 比较: equals()
  4. 填充 : fill()
  5. 转列表: asList()
  6. 转字符串 : toString()
  7. 复制: copyOf()

实操代码:

package com.LiuBing;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Demo4 {
  public static void main(String[] args) {
    List<Person> list = new ArrayList<Person>();// 定义一个Set集合
    list.add(new Person("a", 123));
    list.add(new Person("b", 12));
    list.add(new Person("c", 321));
    list.add(new Person("d", 1223));
    Collections.sort(list);
    System.out.println("========默认排序===========");
    System.out.println(list);
    System.out.println("=======根据年龄降序============");
    Collections.sort(list, (x,y)-> y.getAge()-x.getAge());
        System.out.println(list);
  }
}
class Person implements Comparable<Person> {
  private String name;
  private int age;
  public Person() {
    // TODO Auto-generated constructor stub
  }
  public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
  }
  @Override
  public String toString() {
    return "Person [name=" + name + ", age=" + age + "]";
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }

                                                  控制台输出:

5.2Arrays方法的使用:

5.2.1一些常见方法:

  1. sort():对数组进行排序,支持多种排序算法;
  2. binarySearch():在有序数组中查找指定元素的位置,返回元素所在索引,不存在时返回负数;
  3. copyOf():将一个数组的部分或全部元素复制到另一个数组中,返回新的数组;
  4. fill():使用指定值填充数组的所有元素;
  5. equals():比较两个数组是否相等,即数组长度相等,并且对应索引位置上的元素也相等;
  6. toString():将数组转换为字符串形式。

实操代码:

package com.LiuBing;
import java.util.Arrays;
public class Demo5 {
  public static void main(String[] args) {
   int[] arr = {5, 8, 3, 2, 1, 9, 7, 6, 4};
     // 排序
     Arrays.sort(arr);
     System.out.println("排序后的数组:" + Arrays.toString(arr));
     // 查找元素位置
     int index = Arrays.binarySearch(arr, 9);
     System.out.println("9在数组中的位置:" + index);
     // 复制数组
     int[] arr2 = Arrays.copyOf(arr, 5);
     System.out.println("arr2数组:" + Arrays.toString(arr2));
     // 填充数组
     int[] arr3 = new int[5];
     Arrays.fill(arr3, 3);
     System.out.println("arr3数组:" + Arrays.toString(arr3));
     // 比较两个数组是否相等
     int[] arr4 = {5, 8, 3, 2, 1, 9, 7, 6, 4};
     boolean isEqual = Arrays.equals(arr, arr4);
     System.out.println("arr和arr4是否相等:" + isEqual);
}
}

                                                    控制台输出结果:

 好啦,今天的Map集合的分享就到这里啦,感谢阅读!

目录
相关文章
|
6月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
246 43
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
173 1
|
存储 JavaScript 前端开发
JavaScript进阶-Map与Set集合
【6月更文挑战第20天】JavaScript的ES6引入了`Map`和`Set`,它们是高效处理集合数据的工具。`Map`允许任何类型的键,提供唯一键值对;`Set`存储唯一值。使用`Map`时,注意键可以非字符串,用`has`检查键存在。`Set`常用于数组去重,如`[...new Set(array)]`。了解它们的高级应用,如结构转换和高效查询,能提升代码质量。别忘了`WeakMap`用于弱引用键,防止内存泄漏。实践使用以加深理解。
312 3
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程

热门文章

最新文章