在生活中有许多带有映射关系的数据,比如一个身份证号就对应一个人,那么我们如何存储这样的数据呢,在Java中为我们提供了另外的集合:Map集合。Map集合常用的实现类有( HashMap, Hashtable, LinkedHashMap TreeMap Properties
  Map集合属于双列集合,是通过键来找值;在Map集合中键不能重复,每个键也只能对应一个值。如果键相同的时候,就会把旧值覆盖,然后返回旧值。还有就是Map集合中的数据结构只和键有关,和值无关,值只是键映射的一个数据;键是怎样的顺序,值就为相应的顺序。

一、Map集合的功能

1、添加功能
  • V put(K key,V value):添加元素。这个其实还有另一个功能就是替换。如果键是第一次存储,就直接存储元素,返回null;如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值。
2、删除功能
  • void clear():移除所有的键值对元素
  • V remove(Object key):根据键删除键值对元素,并把值返回
3、判断功能
  • boolean containsKey(Object key):判断集合是否包含指定的键
  • boolean containsValue(Object value):判断集合是否包含指定的值
  • boolean isEmpty():判断集合是否为空
4、获取功能
  • Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set集合
  • V get(Object key):根据键获取值
  • Set keySet():获取集合中所有键的集合
  • Collection values():获取集合中所有值的集合

二、HashMap集合

  HashMap集合是Map集合的实现类。HashMap允许键为 null 和值为 null。一般我们都使用HashMap来实现Map集合,因为HashMap 集合实现 Map 集合添加元素和删除映射关系效率更高

import java.util.HashMap;
public class MyTest {public static void main(String[] args) {       HashMap<String, String> map = new HashMap<>();String v = map.put("1", "张三");//第一次存储键 "1",返回nullSystem.out.println(v);//当发生键相同的时候,值就会覆盖,返回的是旧值v = map.put("1", "李四");System.out.println(v);map.put("2", "李李");map.put("3", "王王");map.put("4", "冯冯");System.out.println(map);}
}
//运行结果为
null
张三
{1=李四, 2=李李, 3=王王, 4=冯冯}

  如果我们想要对Map集合进行遍历我们可以通过键来找值。还可以把这个Map集合中的键值对放到一个Set集合中然后分别获取键和值来进行输出。

  方式一(通过键找值)

public class MyTest3 {public static void main(String[] args) {HashMap<Integer, String> hashMap = new HashMap<>();hashMap.put(1, "bbb");hashMap.put(2, "ccc");hashMap.put(3, "ddd");hashMap.put(4, "eee");hashMap.put(5, "fff");//获取hashMap集合的键Set<Integer> integers = hashMap.keySet();      for (Integer key : integers) {System.out.println(key + "===" + hashMap.get(key));}}
}

  方式二(分别获取键和值)

public class MyTest4 {public static void main(String[] args) {HashMap<Integer, String> hashMap = new HashMap<>();hashMap.put(1, "bbb");hashMap.put(2, "ccc");hashMap.put(3, "ddd");hashMap.put(4, "eee");hashMap.put(5, "fff");//entrySet() 获取键值对 放到Set集合里面去Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();//K getKey ()//返回与此项对应的键。//V getValue ()//返回与此项对应的值。for (Map.Entry<Integer, String> entry : entries) {//System.out.println(entry);Integer key = entry.getKey();String value = entry.getValue();System.out.println(key+"==="+value);}}
}

  当HashMap集合存储的键为自定义类的时候我们还需要重写 hashCode方法 和 equals 方法来保证键的唯一。

三、TreeMap集合

  TreeMap集合的键数据结构为红黑树,这样可以保证键的唯一性和可排序,排序也分为自然排序和比较器排序(方式和TreeSet一样)。定义一个学生类,并进行测试

Student类

import java.util.Objects;
public class Student implements Comparable<Student>{private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic 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);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic int compareTo(Student o) {int num=this.age-o.age;int num2=num==0?this.name.compareTo(o.name):num;return num2;}
}

自然排序

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MyTest {public static void main(String[] args) {TreeMap<Student, String> treeMap = new TreeMap<>();treeMap.put(new Student("张三0", 23), "111");treeMap.put(new Student("张三0", 23), "222");treeMap.put(new Student("张三0", 23333), "222");treeMap.put(new Student("张三1", 24), "444");treeMap.put(new Student("张三2", 26), "555");treeMap.put(new Student("张三3", 25), "666");treeMap.put(new Student("张三4", 28), "777");Set<Map.Entry<Student, String>> entries = treeMap.entrySet();for (Map.Entry<Student, String> entry : entries) {Student key = entry.getKey();String value = entry.getValue();System.out.println(key+"==="+value);}}
}

比较器排序

import java.util.Comparator;
import java.util.TreeMap;
public class MyTest2 {public static void main(String[] args) {TreeMap<Student, String> treeMap = new TreeMap<>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {int num = s1.getAge()-s2.getAge();int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;return -num2;}});treeMap.put(new Student("张三0", 23), "111");treeMap.put(new Student("张三0", 23), "222");treeMap.put(new Student("张三0", 23333), "222");treeMap.put(new Student("张三1", 24), "444");treeMap.put(new Student("张三2", 26), "555");treeMap.put(new Student("张三3", 25), "666");treeMap.put(new Student("张三4", 28), "777");Set<Map.Entry<Student, String>> entries = treeMap.entrySet();Set<Map.Entry<Student, String>> entries = treeMap.entrySet();for (Map.Entry<Student, String> entry : entries) {Student key = entry.getKey();String value = entry.getValue();System.out.println(key + "===" + value);}}
}

  上面的代码分别是TreeMap的两种排序方法。 TreeMap集合的线程是不安全的但是效率比较高。

四、Collections类

  Collections类是针对集合操作的工具类,它有多种成员方法来对集合进行操作。

  1. public static void sort(List list): 排序,默认按照自然顺序
  2. public static int binarySearch(List<?> list,T key): 二分查找
  3. public static T max(Collection<?> coll): 获取最大值
  4. public static void reverse(List<?> list): 反转
  5. public static void shuffle(List<?> list): 随机置换(随机打乱顺序,如斗地主的洗牌阶段)

实例代码如下:

import java.util.ArrayList;import java.util.Collections;
public class MyTest {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(100);list.add(1002);list.add(1030);list.add(1050);list.add(100);//对list集合排序Collections.sort(list);System.out.println(list);//通过二分查找获取索引int i = Collections.binarySearch(list, 1050);System.out.println(i);System.out.println(Collections.max(list));   //获取最大值System.out.println(Collections.min(list));   //获取最小值Collections.reverse(list);//反转集合中的元素System.out.println(list);Collections.shuffle(list);//随机打乱集合中元素的顺序System.out.println(list);}
}
//运行结果为
[100, 100, 1002, 1030, 1050]
4
1050
100
[1050, 1030, 1002, 100, 100]
[100, 1050, 1030, 1002, 100]

  此类完全由在 Collection 上进行操作或返回 Collection 的静态方法组成,所有可以通过类名直接调用方法。


Map集合、Collections类相关推荐

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

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

  2. Java中的集合---------Collections 类---集合的工具类 Comparator比较器

    Collections 2.1 常用功能 java.utils.Collections是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean ...

  3. Map集合 File类 递归 序列化 常用类 进程线程 死锁

    一.Map集合 将键映射到值得对象,键得值不能重复,一个键可以对应最少一个值. Map接口下的封装好得实现类 –|HashMap –|TreeMap 1.Map接口下的方法 增://将指定得值与该映射 ...

  4. 黑马程序员_Java(登陆注册案例,set集合,map集合,Collections)

    ------- android培训. java培训.期待与您交流! ---------- 生命不息,奋斗不止!做个斗士!!!!! 1:登录注册案例 需求:用户登录注册案例. 按照如下的操作,可以让我们 ...

  5. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

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

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

  7. java进阶开发-----Set集合、Map集合(接java集合)

    (一).Set系列集合 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素. Set集合实现类特点 Ha ...

  8. Java进阶,Set集合,Map集合

    Java进阶,Set集合,Map集合 一.Set系列集合 1.Set系列集系概述 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍 ...

  9. java Map集合深入解析

    java集合类梳理 要理解Java技术强大特性就有必要掌握集合框架 1.集合类的继承层次结构 简介对比 总结如下: Collection<--List<--Vector Collectio ...

  10. Java_Collection集合与Map集合的理解与应用

    集合 概述:可以存储多个数据的容器 集合和数组的区别: 相同点:都可以存储多个数组 不同点: 数组中可以存多个数据,但是不能自由的实现数据的新增和删除操作 集合中除了可以存储多个数据,还可以自由的实现 ...

最新文章

  1. ubuntu nano用法
  2. Geoserver中切割离线瓦片TileLayer选项中没有900913选项(图层和图层组怎样配置TileLayers的切割选项)
  3. 多线程与高并发(三):JUC包下新的同步机制:CAS,AtomicInteger,AtomicLong,ReentrantLock,CountDownLatch,ReadWriteLock等
  4. [转]MySQL忘记密码的正确解决方法
  5. mysql写缓冲_MySQL 数据库的提速器-写缓存(Change Buffer)
  6. ARM嵌入式系统网络驱动中的重要数据结构
  7. 【Android UI设计与开发】10:滑动菜单栏(二)SlidingMenu 动画效果的实现
  8. 兼容IE8以下,获取className节点的元素(document.getElementsByClassName()兼容写法)。
  9. android 开发地图,(android地图开发) 高德地图开发准备
  10. adb工具下载及配置使用
  11. 算法导论课后习题答案
  12. [视频]K8软件破解脱壳入门教程
  13. 今天520情人节,你确定不学一下「情话设计模式」?
  14. 不离不弃共赴鸿蒙什么意思,鸿蒙是什么意思 “道起鸿蒙”是什么意思,有何典故,语出何处?...
  15. 思维简史:从丛林到宇宙
  16. java8判断当前时间是否大于某个时间
  17. 如何搭建一个自己的图床
  18. win2008 启用 mongodb 服务出错 1053 的解决方法
  19. 分支限界——TSP问题
  20. Ubuntu qq2009 wine 安装

热门文章

  1. html弹出层很字体模糊了,由CSS3 transform 字体模糊问题揭示出浏览器渲染机制
  2. python版FlappyBird代码解析
  3. 万兴剪刀手去水印教程_万兴神剪手怎么去水印教程,赶快收藏吧
  4. jquery--拖拽效果
  5. C++ vector 标准差
  6. java的login_Java login登陆界面设计
  7. squid 备忘[1]:根据域名选择上游代理
  8. VS2015 密钥 专业版和企业版
  9. 小智直播配置安装-配置录播,回放
  10. 太酷了!我老了之后,也要这么“兴风作浪”!