集合架构-Map集合及工具类

简介: 集合架构-Map集合及工具类

一、Map集合介绍

简介:

1.Map集合是我们常使用的集合,了解和使用map集合是必要的。

2.Map不能直接创建对象,可以通过多态的形式创建对象。

3.Map是一个双列集合,一个元素包含两个值(一个key,一个value),key表示键,value表示值。

4.Map集合中的元素,key和value的数据类型可以相同,也可以不同,并且key和value是一一对应的。

5.Map中不能包含重复的键,若是有重复的键添加,则会以最后一次的键为准,而本次添加的键会被覆盖,value(值)为将被修改。

6.Map集合有子类:一是HashMap,另一个是TreeMap。

常用方法

map.put(K key, V value); 将键(key)/值(value)映射存放到Map集合中
map.get(Object key); 返回指定键所映射的值,没有该key对应的值则返回 null
map.size(); 返回Map集合中数据数量
map.clear(); 清空Map集合
map.isEmpty (); 判断Map集合中是为空,空则返回true,否则返回false
map. containsKey(key); 判断集合中是否包含指定的键
map.containsValue(value); 判断集合中是否包含指定的值
map.remove(Object key); 根据键删除键和对应的值

二、Map的增删改查

实例化:

Map m = new HashMap();

1.增

//增加元素
m.put("a", 1);
m.put("b", 2);
m.put("c", 3);
m.put("d", 4);

2.改

//根据键(key)修改,第二参数是改后的值(value)
m.put("b", 7);
//根据键(key)修改,第二参数是旧值,第三参数是新值
m.replace("c", 3, 9);

3.删

//根据键(key)删除
m.remove("a");

4.查

//根据键查看,可打印返回值查看
m.get("c");

三、Map的遍历方法

1.EntrySet

//实例化Map集合
Map m = new HashMap();
//增加元素
m.put("a", 1);
m.put("b", 2);
m.put("c", 3);
m.put("d", 4);
//遍历方式entrySet
Set set = m.entrySet();
for (Object o : set) {
  Map.Entry entry = (Map.Entry) o;
  System.out.println("key键为:"+entry.getKey()+"--value值为:"+entry.getValue());
}

输出结果:

2.KeySet

//实例化Map集合
Map m = new HashMap();
//增加元素
m.put("a", 1);
m.put("b", 2);
m.put("c", 3);
m.put("d", 4);
//遍历方式keySet
Set set2 = m.keySet();
for (Object obj : set2) {
System.out.println("键为:"+obj+"--value值为:"+m.get(obj));
 }

输出结果:

四、Map集合的泛型

概括:

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

1.使用泛型

package com.SAME_LOVE.Map;
import java.util.HashMap;
import java.util.Map;
/**
 * @author SAME_LOVE
 * @com.SAME_LOVE.Map
 * @Demo03(说明):Map集合的泛型(概述及使用.泛型类.泛型方法)
 * 概述: 将运行时的异常转换为编译时的错误 并且可以高代码的健壮行
 */
public class Demo03 {
  public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("a", 1);
    map.put("b", 2);
    map.put("c", 3);
    map.put("d", 4);
    map.put("e", 5);
    for (Map.Entry<String, Integer> m : map.entrySet()) {
      // 求出map集合中所有奇数值
      if (m.getValue() % 2 == 1) {
        System.out.println(m.getValue() + "为奇数");
      } else {
        // 求出map集合中所有偶数值
        System.out.println(m.getValue() + "为偶数");
      }
    }
  }
}

输出结果为:

2.泛型类

代码内有注解及说明

package com.SAME_LOVE.Map;
import java.util.HashMap;
import java.util.Map;
/**
 * @author SAME_LOVE
 * @com.SAME_LOVE.Map
 * @Demo03(说明):Map集合的泛型(概述及使用.泛型类.泛型方法) 概述: 将运行时的异常转换为编译时的错误 并且可以高代码的健壮行
 */
public class Demo03 {
}
// 学生类
class Student {
}
// 书类
class Book {
}
/**
 * @author SAME_LOVE
 * @com.SAME_LOVE.Map
 * @BaseDao(说明):该类封装所以方法
 */
class BaseDao<T> {
  /**
   * T 是泛型类
   * @param t
   * 方法参数是可以同名的,只是不同参数
   * 在此只需该变泛型类(T)就可以拥有该类(BaseDao)的方法
   */
  // 有增加的方法
  public int Add(T t) {
    return 0;
  }
  // 有修改的方法
  public int Edit(T t) {
    return 0;
  }
  // 有删除的方法
  public int Del(T t) {
    return 0;
  }
}
/**
 * @author SAME_LOVE
 * @com.SAME_LOVE.Map
 * @StudentDao(说明):比如这是学生类的数据访问层
 * 继承BaseDao类后尖括号里的泛型类是Student类,那BaseDao类的泛型类就是Student类
 * 在此继承后,StudentDao类里面就相当于有了BaseDao的增删改的方法
 */
class StudentDao extends BaseDao<Student>{
  public static void main(String[] args) {
    new StudentDao().Add(new Student());//学生类的增加
    new StudentDao().Edit(new Student());//学生类的修改
    new StudentDao().Del(new Student());//学生类的删除
  }
}/**
 * @author SAME_LOVE
 * @com.SAME_LOVE.Map
 * @StudentDao(说明):比如这是书类的数据访问层
 * 继承BaseDao类后尖括号里的泛型类是Book类,那BaseDao类的泛型类就是Book类
 * 在此继承后,BookDao类里面就相当于有了BaseDao的增删改的方法
 */
class BookDao extends BaseDao<Book>{
  public static void main(String[] args) {
    new BookDao().Add(new Book());//书类的增加
    new BookDao().Edit(new Book());//书类的修改
    new BookDao().Del(new Book());//书类的删除
  }
}

3.泛型方法

public <T> Map data(String key,T value){
        System.out.println("泛型方法");
        return null;
    }

五、集合框架工具类

1.Collections

进行排序(代码演示):

public static void main(String[] args) {
   List<String> list = new ArrayList<String>();
   //增加元素对象
   list.add("c");
   list.add("b");
   list.add("d");
   list.add("a");
   System.out.println("排序前"+list);
   //框架工具类方调用(排序)
   Collections.sort(list);
   System.out.println("排序后"+list);
   //调用工具类(Collections)sort方法降序
   Collections.sort(list,new Comparator<String>() {
   @Override
   public int compare(String o1, String o2) {
   //想要升序参数o1与o2调换即可
   return o2.compareTo(o1);
   }
   });
   System.out.println("排序后"+list);
   }

输出结果为:

 

对对象进行排序(代码演示):

public static void main(String[] args) {
   //对于引用对象
   List<Per> list = new ArrayList<Per>();
   list.add(new Per(2, "小黑子"));
   list.add(new Per(1, "ikun"));
   list.add(new Per(4, "花姑凉"));
   list.add(new Per(3, "密西西"));
   System.out.println("没排序前");
   for (Per per : list) {
   System.out.println(per);
   }
   System.out.println("已排序后");
   Collections.sort(list);
   for (Per per : list) {
   System.out.println(per);
   }
   }
   }
   class Per implements Comparable<Per>{
   private int id;
   private String name;
   public int getId() {
   return id;
   }
   public void setId(int id) {
   this.id = id;
   }
   public String getName() {
   return name;
   }
   public void setName(String name) {
   this.name = name;
   }
   @Override
   public String toString() {
   return "Per [id=" + id + ", name=" + name + "]";
   }
   public Per(int id, String name) {
   super();
   this.id = id;
   this.name = name;
   }
   @Override
   public int compareTo(Per o) {
   //根据元素对象编号升序
   return this.id - o.id;
   }

输出结果为:

Collections 是一个操作Set、List和Map等集合的工具类,提供了一系列静态方法对集合元素进行排序、查询和修改等操作。

还可以进行数字进行排序(升序,降序),操作也是以上一样的进行,只需将元素该为数字。

2.Arrays

进行排序(代码演示):

public static void main(String[] args) {
    // 定义数组
    String[] arr = new String[] { "c", "d", "a", "b" };
    // 将数组转换会集合
    List<String> list = Arrays.asList(arr);
    System.out.println("没有排序前:"+list);
    // 调用集合工具类Arrays的方法进行降序
    Arrays.sort(arr, new Comparator<String>() {
      // 重写方法
      @Override
      public int compare(String o1, String o2) {
        return o2.compareTo(o1);
      }
    });
    System.out.println("Arrays的方法进行降序"+list);
    // 调用集合工具类Arrays的方法进行升序
    Arrays.sort(arr, new Comparator<String>() {
      //重写方法
      @Override
      public int compare(String o1, String o2) {
        return o1.compareTo(o2);
      }
    });
    System.out.println("Arrays的方法进行升序"+list);
  }

最后输出结果为:

实现Comparator接口的方法实在太繁琐,你还要为此创建一个类来重写conpare方法,于是,匿名内部类的优点就体现出来了。

new Comparator<String>()后面的大括号的内容相当于一个没有名字的类,它实现了不用起名字,也不用implements Comparator 了,放到接口后面就可以。

目录
相关文章
|
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月前
|
安全 Java
【Java集合类面试五】、 如何得到一个线程安全的Map?
如何得到一个线程安全的Map的方法包括:使用Collections工具类将Map包装为线程安全,使用java.util.concurrent包下的ConcurrentHashMap,以及不推荐使用性能较差的Hashtable。
|
4月前
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。
|
18天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
27天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
42 3
|
1月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####