Map集合

1.1 概述

Map集合作为最常用的集合之一,在现实生活中,我们通常会看到IP地址与主机,身份证与个人,丈夫与妻子,这种一一对应的关系,我们通常也称之为映射,所以,java专门有一个存储这种对象关系的对象-----即:java.util.Map接口

1.2 与Collection比较

  • Collection集合中的元素都是单个的,也可以理解为单身,往集合中存储元素也是一个一个存的.
  • Map集合中的元素都是成对存在的,可以理解成夫妻,每个元素都由键与值组成,我们可以通过元素的键找到对应的值.
  • Collection中的集合是单例集合,Map中的集合是双例集合.
  • 注意:Map集合中的元素,键必须保证唯一,值允许有多个重复的;每个键只对应一个值.

1.3 Map的常用子类

经过前几篇的介绍,Map也有很多子类,我们主要用的还是HashMap、LinkedHashMap集合,来看一下他们的特性吧.

  • HashMap<K,V>:存储数据采用的哈希表结构,元素的存储顺序不能保证一致,由于要保证键的唯一、不重复,需要重写equals()、hashCode()方法.
  • LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
  • TreeMap<K,V>:TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序

tips:Map接口中的集合都有两个泛型变量<K,V>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量<K,V>的数据类型可以相同,也可以不同。

1.4 Map的常用方法

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

  • public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
  • public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
  • public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
  • public Set keySet() : 获取Map集合中所有的键,存储到Set集合中。
  • public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
  • public boolean containKey(Object key) :判断该集合中是否有此键。

代码演示:

 //创建 map对象 HashMap<String, String> map = new HashMap<String, String>(); //添加元素到集合 map.put("黄晓明", "杨颖"); map.put("文章", "马伊琍"); map.put("邓超", "孙俪"); System.out.println(map); //String remove(String key) System.out.println(map.remove("邓超")); System.out.println(map); // 想要查看 黄晓明的媳妇 是谁 System.out.println(map.get("黄晓明")); System.out.println(map.get("邓超"));

tips:
使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;
若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。

1.4 Map的遍历

Map的遍历有两种方法:

方式1:键找值方式

通过元素中的键,找到所对应的值

分析步骤:

  1. 获取Map集合中所有的键,由于Map中键是唯一的,所以用Set集合来存储所有键.方法:keySet()
  2. 遍历Sert集合中存储的键,得到每一个键
  3. 根据键,找到所对应的值.方法:get(k key)

代码演示:

 HashMap<String, String> hashMap = new HashMap<>();hashMap.put("张三","男");hashMap.put("李四","女");hashMap.put("网二","男");hashMap.put("麻子","女");//第一种遍历:根据键获取值Set<String> keySet = hashMap.keySet();for (String key : keySet) {String value = hashMap.get(key);System.out.println(key+":"+value);}

方式1:键值对方式

即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

Entry键值对对象:
我们已经知道, Map 中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在 Map 中是一一对应的关系,这一对对象又称做 Map 中的一个 Entry(项) 。 Entry 将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历 Map 集合时,就可以从每一个键值对( Entry )对象中获取对应的键与对应的值。

Entry提供的方法:

  • public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。

获取了Entry对象 , 表示获取了一对键和值,那么同样Entry中 , 分别提供了获取键和获取值的方法:

  • public K getKey() :获取Entry对象中的键。
  • public V getValue() :获取Entry对象中的值。

分析步骤:

  1. 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示: entrySet() 。
  2. 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。
  3. 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示: getkey() getValue()

代码演示:

HashMap<String, String> hashMap = new HashMap<>();hashMap.put("张三","男");hashMap.put("李四","女");hashMap.put("网二","男");hashMap.put("麻子","女");System.out.println("--------------------------");//第二种遍历:EntrySet获取键,获取值Set<Map.Entry<String, String>> entrySet = hashMap.entrySet();for (Map.Entry<String, String> stringEntry : entrySet) {String key = stringEntry.getKey();      //获取键String value = stringEntry.getValue();  //获取值System.out.println(key+":"+value);}

1.4 HashMap存储自定义类型

练习:每位学生(姓名,年龄)都有自己的家庭住址。那么,既然有对应关系,则将学生对象和家庭住址存储到map集合中。学生作为键, 家庭住址作为值。

编写学生类:

 public class Student { private String name; private int age;//构造方法 //get/set @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); }@Override public int hashCode() { return Objects.hash(name, age); } }

编写测试类:

 public class HashMapTest { public static void main(String[] args) { //1,创建Hashmap集合对象。 Map<Student,String> map = new HashMap<Student,String>(); //2,添加元素。map.put(new Student("lisi",28), "上海"); map.put(new Student("wangwu",22), "北京"); map.put(new Student("wangwu",22), "南京"); //3,取出元素。键找值方式 Set<Student> keySet = map.keySet(); for(Student key: keySet){ String value = map.get(key); System.out.println(key.toString()+"....."+value); } } }
  • 当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法。
  • 如果要保证map中存放的key和取出的顺序一致,可以使用 java.util.LinkedHashMap 集合来存放。

1.4 LinkedHashMap介绍

特点:元素唯一,查询速度快,元素有序!!
代码演示:

 public class LinkedHashMapDemo { public static void main(String[] args) { LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(); map.put("邓超", "孙俪"); map.put("李晨", "范冰冰"); map.put("刘德华", "朱丽倩"); Set<Entry<String, String>> entrySet = map.entrySet(); for (Entry<String, String> entry : entrySet) { System.out.println(entry.getKey() + " " + entry.getValue()); } } }

运行结果:

 邓超 孙俪 李晨 范冰冰 刘德华 朱丽倩

1.5 TreeMap集合

特点: TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序比较器排序;到时使用的是哪种排序,取决于我们在创建对象的时候所使用的构造方法;

 public TreeMap() 使用自然排序 public TreeMap(Comparator<? super K> comparator) 比较器排

使用方法和List里的一样,详情请点击:https://blog.csdn.net/qq_44890539/article/details/104933339

冒泡排序

代码实现:

 int[] arr = {1,2,432,32,54,32,3,7,657,563,25,43,6,463,52};//冒泡排序for (int i = 0; i < arr.length - 1; i++) {for(int j = 0; j < arr.length - 1- i; j++){int temp = 0;//判断如果前面元素大于后面,就换值if(arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}System.out.println(Arrays.toString(arr));

Map集合概述、冒泡排序相关推荐

  1. 【零基础学Java】—Map集合概述(四十三)

    一.Map集合概述 现实生活中,我们常会看到这样一种集合,IP地址与主机 名,身份证号与个人,系统用户名与系统对象等等,这种一一对应的关系,就叫做映射.java提供了专门的集合用来存放这种对象的关系, ...

  2. 【Java】Map集合概述

    目录 一.前言 二.Map介绍 三.Map的基本功能 Map功能演示: 四. Map集合的获取功能 Map遍历演示: 一.前言 map集合是我们常使用的集合,了解和使用map集合是必要的 二.Map介 ...

  3. 学习java的第三十三天,Map集合的概述、Map接口的使用

    一.Map集合概述 Map接口的特点: 用于存储任意键值对(Key-Value) 键:无序.无下标.不允许重复(唯一的) 值:无序.无下标.可以重复 Map父接口的特点:存储一对数据(Key-valu ...

  4. 8.Map集合(HashMapTreeMap)

    一.Map集合概述和使用 1.Map集合概述 Interface Map<K,V> K:键的类型 V:值的类型 将键映射到值的对象:不能包含重复的键:每个键可以映射到最多一个值 创建Map ...

  5. (Java集合框架)Map集合

    Map集合 概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对象 ...

  6. Java进阶(七)Set系列集合、Map集合体系

    七.Set系列集合.Map集合体系 需要学会什么? Set系列集合的特点:Set系列集合的特点和底层原理. 集合工具类Collections:快速的对集合进行元素的添加.排序等操作. 综合案例:把Co ...

  7. 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))

    1.Map集合概述和特点 1.需求:    根据学号获取学生姓名 2.Map接口概述     查看API可以知道:     将键映射到值的对象     一个映射不能包含重复的键     每个键最多只能 ...

  8. java中Map集合、模拟斗地主洗牌发牌、JDK9对集合添加的优化

    1.1 Map集合概述 Map集合概述 Map==>映射(一个对应一个) Map是一个接口,只要实现了该接口的类都是双列集合. 双列集合每次存储元素时都需要存储两个元素,一个元素称为键,一个元素 ...

  9. Day18JavaSE——Map集合Collections工具类集合案例练习

    Day18JavaSE--Map集合&Collections工具类&集合案例练习 文章目录 Day18JavaSE--Map集合&Collections工具类&集合案例 ...

最新文章

  1. Beginning Adaptive Layout Tutorial
  2. 职业中专的计算机综合应用,职业中专计算机教学的思考
  3. 总结 | 如何测试你自己的 RubyGem
  4. 关于解决mybase7继续使用的方法
  5. python list的一个面试题
  6. php mysql 字段备注_MySQL下读取 表/字段 的说明备注信息
  7. 使用NSKeyedArchiver归档
  8. 使用page-slot显示SAP Spartacus section里包含的Component和layout设计
  9. 2021牛客OI赛前集训营-提高组(第五场)D-牛牛的border【SAM】
  10. linux语言的说明顺序有哪些,(linux常用头文件详解.doc
  11. 在CentOS7上安装配置Corosync高可用集群过程全记录
  12. static--静态方法与静态成员
  13. Android 系统性能优化(41)---Android代码内存优化建议-OnTrimMemory优化
  14. Java 实例 - 测试两个字符串区域是否相等
  15. 如何快速将文件中的空格更换成逗号(图文详解)
  16. Windows FindFirstFile利用
  17. 【Vue学习笔记】黑马程序员四小时速成VUE
  18. java类的封装关系_Java—类的封装、继承与多态
  19. 魔百盒cm201-1YS不识别
  20. 红米AC3000、小米cr8806、8808、8809成功刷入openwrt

热门文章

  1. 币图网_教你必须了解的智能合约,共识机制,分布式存储以及密码学
  2. 皖西学院2021对口高考成绩查询,2021年皖西学院高考录取结果什么时候出来及查询系统入口...
  3. 自己编写小程序背日语50音图
  4. Centos6.5系统时间慢8小时解决方案
  5. 计算机怎样辅助与美工结合,幼儿园环保美工与信息技术整合案例(18页)-原创力文档...
  6. Multi-objective training of Generative Adversarial Networks with multiple discriminators-论文翻译
  7. AcWing练习代码
  8. 2007年十大IT事件:Gphone摇身变为Android
  9. Facebook vs. Apple:对手?盟友?附庸?
  10. 分析型数据库(AnalyticDB)-V2.7版本正式支持全文索引