集合--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集合的分享就到这里啦,感谢阅读!

目录
相关文章
|
23天前
Collection和Map的遍历方式
Collection和Map的遍历方式
12 0
|
7月前
|
存储 索引 容器
List集合详解
List集合详解
60 0
|
8月前
|
前端开发 数据库 索引
今天就聊聊List集合
今天就聊聊List集合
33 0
|
11月前
|
存储 开发者 索引
List 和 Set 集合的区别
List 和 Set 集合的区别
78 0
|
23天前
|
C++
c++ set、map的四种自定义排序方法
c++ set、map的四种自定义排序方法
90 0
|
23天前
|
存储 安全 Java
一文了解List集合
Java的整个集合框架中,主要分为List,Set,Queue,Stack,Map等五种数据结构。其中,前四种数据结构都是单一元素的集合,而最后的Map则是以KV对的形式使用。根本就List集合做出了一些解析
|
6月前
|
容器
List集合
List集合
28 0
List集合
|
8月前
|
容器
List集合详细介绍
List集合详细介绍
34 0
|
9月前
|
存储 安全 Java
|
11月前
List,Map 三种遍历方式:(总结理解)
List,Map 三种遍历方式:(总结理解)
46 0

热门文章

最新文章