Map集合的特点

1、Map集合中保存的都是键值对,键和值是一一对应的

2、一个映射不能包含重复的值

3、每个键最多只能映射到一个值上

Map接口和Collection接口的不同

Map是双列集合的根接口,Collection是单列集合的根接口

1、Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口)

2、Map的键是唯一的,Collection的子接口Set是唯一的

3、Map集合的数据结构值针对键有效,跟值无关;如:TreeMap:键是用二叉树算法,HashMap:键是hash算法, Collection集合的数据结构是针对元素有效

Map集合的遍历方式

package com.jd.text;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; public class Demo06 { public static void main(String[] args) {
// 创建map集合
Map map = new HashMap<>();
// 添加 将指定的值与此映射中的指定键关联
map.put("张三", 12);
map.put("李四", 13);
map.put("蔡文姬", 14);
map.put("王五", 15);
// 删除 如果存在一个键的映射关系,则将其从此映射中移除
map.remove("王五");
// map.clear();//删除全部 从此映射中移除所有映射关系
// 根据指定的key获取对应的value
Object obj1 = map.get("张三");
System.out.println(obj1);
// 是否包含指定的key,包含返回true,不包含返回false。
boolean b = map.containsKey("张三");
System.out.println(b);
// 是否包含指定的value,包含返回true,不包含返回false。
boolean c = map.containsValue(13);
System.out.println(c); System.out.println("******************************"); // map集合的遍历,通过keyset()方法(迭代器)
Set keySet = map.keySet();
Iterator iter = keySet.iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object value = map.get(key);
System.out.println(key + ":" + value);
}
System.out.println("******************************"); // map集合的遍历,通过keyset()方法(foreach)
Set keySet2 = map.keySet();
for (Object key : keySet2) {
Object value = map.get(key);
System.out.println(key + ":" + value);
}
System.out.println("******************************"); // map集合的遍历,通过entrySet()方法(foreach)
Set entrySet = map.entrySet();
for (Object obj3 : entrySet) {
Entry e = (Entry) obj3;
Object key = e.getKey();
Object value = e.getValue();
System.out.println(key + ":" + value);
}
System.out.println("******************************"); // map集合的values方法,获取到的map集合的value的值组成的collection集合
Collection coll = map.values();
for (Object obj : coll) {
System.out.println(obj);
}
}
}

运行结果:

12
true
true
******************************
李四:13
张三:12
蔡文姬:14
******************************
李四:13
张三:12
蔡文姬:14
******************************
李四:13
张三:12
蔡文姬:14
******************************
13
12
14

TreeMap集合保存自定义对象

package com.jd.text;

import java.util.Set;
import java.util.TreeMap;

/*
* TreeMap保存自定义对象,比较的Comparable和Comparator两种方式
* 1.通过实现Comparable接口,重写compareTo()方法。
*/
public class Demo07 {

public static void main(String[] args) {
TreeMap map=new TreeMap<>();
map.put(new User("张三01", 12),11);
map.put(new User("张三01", 10),11);
map.put(new User("张三02", 13),11);
map.put(new User("张三01", 12),11);
//通过重写hashCode()和equals(Object obj)方法防止重复的值存入
Set set = map.keySet();
for (Object key : set) {
Object value = map.get(key);
System.out.println(key + ":" + value);
}
}
}

package com.jd.text;
/*
* 通过实现Comparable接口,重写compareTo()方法。
*/
public class User implements Comparable{ private String name;
private int 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;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
public User() {
super();
} @Override
public int hashCode() {
final int prime=31;
int result=1;
result=prime*result+age;
result=prime*result+((name==null)?0:name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if(this==obj)
return true;
if(obj==null)
return false;
if(getClass()!=obj.getClass())
return false;
User user=(User) obj;
if(age!=user.age)
return false;
if(name==null){
if(user.name!=null)
return false;
}else if(!name.equals(user.name))
return false;
return true;
}
@Override
public int compareTo(Object o) {
if(o instanceof User){
User user=(User) o;
int sum=name.compareTo(user.name);
if(sum==0)
return age-user.age;
return sum;
}
throw new ClassCastException("不是User类型");
} }

运行结果:

User [name=张三01, age=10]:11
User [name=张三01, age=12]:11
User [name=张三02, age=13]:11
package com.jd.text;
/*
* TreeMap保存自定义对象,比较的Comparable和Comparator两种方式
* 2.自己构造比较器实现Comparator接口,重写compare(Object o1, Object o2)方法
*/ import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap; public class Demo08 { public static void main(String[] args) {
TreeMap map=new TreeMap(new MyCompare());
map.put(new User2("张三01", 12),11);
map.put(new User2("张三01", 10),11);
map.put(new User2("张三02", 13),11);
map.put(new User2("张三01", 12),11);
//通过重写hashCode()和equals(Object obj)方法防止重复的值存入
Set set = map.keySet();
for (Object key : set) {
Object value = map.get(key);
System.out.println(key + ":" + value);
}
}
} class User2{
String name;
int age; public User2(String name,int age){
this.name=name;
this.age=age;
} @Override
public int hashCode(){
final int prime=31;
int result=1;
result=prime*result+age;
result=prime*result+((name==null)?0:name.hashCode());
return result;
}
@Override
public boolean equals(Object obj){
if(this==obj)
return true;
if(obj==null)
return false;
if(getClass()!=obj.getClass())
return false;
User2 u=(User2) obj;
if(age!=u.age)
return false;
if(name==null){
if(u.name!=null)
return false;
}else if(!name.equals(u.name))
return false;
return true;
}
@Override
public String toString() {
return "User2 [name=" + name + ", age=" + age + "]";
}
}
//比较器
class MyCompare implements Comparator{ @Override
public int compare(Object o1, Object o2) {
if(o1 instanceof User2 && o2 instanceof User2){
User2 u1=(User2) o1;
User2 u2=(User2) o2;
int sum=u1.age-u2.age;
if(sum==0){
return u1.name.compareTo(u2.name);
}
return sum;
}
throw new ClassCastException("不是User2 类型");
} }

运行结果:

User2 [name=张三01, age=10]:11
User2 [name=张三01, age=12]:11
User2 [name=张三02, age=13]:11

Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式的更多相关文章

  1. 8.13.2 TreeSet实现Comparable接口的两种方式

    推荐使用第二种方式,编写比较器可以使数据类的程序耦合度降低,同时比较器也可以重复利用! 第一种方式:数据类实现Comparable接口,实现其中的compareTo方法 创建对象时,使用TreeSet ...

  2. TreeMap集合根据指定元素,进行删除和修改的两种方式实现及bug梳理

    TreeMap根据key中的指定元素进行删除修改的两种方式实现及注意事项: 方式一:利用增强for进行删除和修改 总结:逻辑简单,但是局限性太强,如果排序规则是从小到大进行排序的,则该方法不能进行删除 ...

  3. Spring IOC 依赖注入的两种方式XML和注解

    依赖注入的原理 依赖注入的方式---XML配置 依赖注入的方式---注解的方式 Spring 它的核心就是IOC和AOP.而IOC中实现Bean注入的实现方式之一就是DI(依赖注入). 一 DI的原理 ...

  4. JQuery中阻止事件冒泡的两种方式及其区别

    JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function(event){ ...

  5. JQuery 提供了两种方式来阻止事件冒泡。

    JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function(event){ ...

  6. 遍历Map集合:java.util.Map.Entry、KeySet两种方式

    遍历Map集合的两种方式: 1.用KeySet Map.keySet(),返回一个存放所有key的set集合,通过遍历集合,根据key值取出所有的value值. Map<String,Strin ...

  7. java的取出map里所有元素的两种方式

    /* * 取出map元素的两种方式 */package com.map.test; import java.util.HashMap;import java.util.Iterator;import ...

  8. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  9. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap( ...

随机推荐

  1. Hadoop——API操作

    代码示例: package com.atguigu.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoo ...

  2. Android开发“HelloWorld”项目

    运行截图; 注:在activity_hello_world.xml文件中·可以改变显示内容,如图: 运行截图;

  3. 每天一个 HTTP 状态码 101

    101 Switching Protocols 当客户端的请求具有 Upgrade HTTP 首部,表示要求服务器切换到指定协议:此时服务器端就可以向客户端响应 101 Switching Proto ...

  4. MySQL中读页缓冲区buffer pool

    Buffer pool 我们都知道我们读取页面是需要将其从磁盘中读到内存中,然后等待CPU对数据进行处理.我们直到从磁盘中读取数据到内存的过程是十分慢的,所以我们读取的页面需要将其缓存起来,所以MyS ...

  5. 开发工具-Typora编辑器下载地址

    更新记录 2022年6月10日 完善标题. 比较好用的Markdown编辑器了,哈哈. https://typoraio.cn/

  6. 轻量级多级菜单控制框架程序(C语言)

    1.前言 作为嵌入式软件开发,可能经常会使用命令行或者显示屏等设备实现人机交互的功能,功能中通常情况都包含 UI 菜单设计:很多开发人员都会有自己的菜单框架模块,防止重复造轮子,网上有很多这种菜单框架 ...

  7. 记一次grpc server内存/吞吐量优化

    背景 最近,上线的采集器忽然时有OOM.采集器本质上是一个grpc服务,网络设备通过grpc协议将数据上报后,采集器进行格式等整理后,发往下一个系统(比如分析,存储). 打开运行环境,发现特性如下: ...

  8. 关于各种Vue UI框架中加载进度条的正确使用

    这里拿MUSE UI 中的进度条举例 <mu-circular-progress :size="40" class="icon" v-if="i ...

  9. WPF开发随笔收录-ScrollViewer滑块太小解决方案

    一.前言 在WPF开发过程中,ScrollViewer是一个很常使用到的控件,在自己工作的项目中,收到一个反馈就是当ScrollViewer里面的内容太长时,滚动条的滑块就会变得很小,然后导致点击起来 ...

  10. Python:27行代码实现将多个Excel表格内容批量汇总合并到一个表格

    序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 老板最近越来越过分了,快下班了发给我几百个表格让我把内容合并到一个表格内去.还好我会Python,分分钟 ...