HashMap存储自定义类型键值和LinkedHashMap集合
HashMap存储自定义类型键值
1、当给HashMap中存放自定义对象时,如果自定义对象是键存在,保证键唯一,必须复写对象的hashCode和equals方法。
2、如果要保证map中存放的key和取出的顺序一致,可使用LinkedHashMap集合来存放
public class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
//有参构造
this.name = name;
this.age = age;
}//无参构造
public Person() {
super();
}
//get set
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;
}
//toString方法
public String toString() {
return "Person [name=" + name + ", 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;
}
//哈西和equals
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
public class Demo03 {
public static void main(String[] args) {
Map<Person,String> map=new HashMap<Person,String>();
map.put(new Person("胸大",22),"java0322班");
map.put(new Person("胸二",20), "java0222班");
map.put(new Person("胸二",20), "java0262班");
//遍历
//1.获取装有所有key的Set集合
Set<Person> set=map.keySet();
//2.遍历set集合取到每一个key
for(Person key:set){
System.out.println(key+"..."+map.get(key));
}
}
}
LinkedHashMap
public class Demo04 {
public static void main(String[] args) {
Map<String,Person> map=new LinkedHashMap<String,Person>();
//添加数据
map.put("java0322",new Person("胸三",33));
map.put("java0222",new Person("胸大",33));
map.put("java0611",new Person("胸三",33));
//遍历(entrySet迭代器)
//1.获取所有结婚证存在的集合
Set<Map.Entry<String,Person>> set=map.entrySet();
//2.获取迭代器对象
Iterator<Map.Entry<String,Person>> it=set.iterator();
//3.循环判断下个元素是否有值
while(it.hasNext()){
//4.获取每一个结婚证对象
Map.Entry<String, Person> entry=it.next();
//5.从结婚证对象中获取key
String key=entry.getKey();
//6.从结婚证对象中获取value
Person value=entry.getValue();
System.out.println(key+"..."+value);
}
}
}
HashMap存储自定义类型键值和LinkedHashMap集合的更多相关文章
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_7_HashMap存储自定义类型键值
自定义类型做key值.必须要重写hashCode和equals方法 创建pserson类 有name个age两个成员变量.重写toString方法 key有重复,会被新的value值替换掉. key值 ...
- GreenDao存储自定义类型对象解决方案(转)
最近公司项目选用GreenDao作为Android客户端本地数据库的对象关系映射框架.对于GreenDao虽然以往也有简单用过,但这还是笔者第一次在实际业务中使用.碰到了题目所述的两个问题,虽然在Tu ...
- HashSet存储自定义类型元素和LinkedHashSet集合
HashSet集合存储自定义类型元素 HashSet存储自定义类型元素 set集合报错元素唯一: ~存储的元素(String,Integer,-Student,Person-)必须重写hashCode ...
- SortedDictionary<TKey, TValue> 类 表示根据键进行排序的键/值对的集合。
SortedDictionary<TKey, TValue> 类 表示根据键进行排序的键/值对的集合. SortedDictionary<TKey, TValue> 中的每 ...
- 集合框架-Map集合-HashMap存储自定义对象
1 package cn.itcast.p6.hashmap.demo; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 im ...
- struct 如何存储指针类型的值
通过 __unsafe_unretained标示符标示指针类型的值,否则xcode会报以下错误(前提,你使用的是ARC模式): ARC forbids Objective-C objects in s ...
- 浅析HashSet add() 方法存储自定义类型对象的过程
一.自定义一个Student类 package date0504; public class Student { private String id; Student(String id){ this ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_5_HashSet存储自定义类型元素
想存储的元素不重复,就必须重写hashCode和equals这两个方法 新建一个Person类.添加姓名和年龄这两个成员变量..get和set,有参和无参构造. 重点是重写了toString的方法 自 ...
- java——删除HashMap中所有的键值对
第一种:❌(报错) import java.util.HashMap; import java.util.Set; public class T{ public static void main(St ...
随机推荐
- C++ 类成员指针
C++的类成员指针是一种奇葩的指针. 假设现在我们要表示一个三维的点,现在有两种定义方式: struct point1{ int x, y, z; }; struct point2{ int c[3] ...
- Apache Hudi 如何加速传统的批处理模式?
1. 现状说明 1.1 数据湖摄取和计算过程 - 处理更新 在我们的用例中1-10% 是对历史记录的更新.当记录更新时,我们需要从之前的 updated_date 分区中删除之前的条目,并将条目添加到 ...
- Spring (IOC)配置
就是这个东西,里面的不同标签,所代表的不同含义 beans 里面有很多的bean ,每一个bean都是容器里面的一个对象 1.别名alias (另外的一个名字) XML <alias na ...
- python中的sort用法
内置的列表类型提供sort的方法 可以根据多项指标给list实例中的元素排序.在默认情况下,sort方法总是按照自然升序排列列表内的元素 #升序排列 list1=[2,3,1,2,5] list1.s ...
- 10大黑客专用的 Linux 操作系统
上一篇:为什么不建议把数据库部署在Docker容器内? 今天列出一些最常用.最受欢迎的Linux发行版来学习黑客和渗透测试! 1. Kali Linux Kali Linux是最著名的Linux发行版 ...
- SmartDialog迁移至4.0:一份真诚的迁移说明
前言 一个开源库,随着不断的迭代优化,难免会遇到一个很痛苦的问题 最初的设计并不是很合理:想添加的很多新功能都受此掣肘 想使得该库更加的强大和健壮,必须要做一个重构 因为重构涉及到对外暴露的api,所 ...
- 那些我懵懵懂懂的js
1.this 如果说this是代表当前对象,而js中,除原始值(var str = "Leonie",值Leonie是不能改变的,它就是一个字符串,如var num = 4, 4也 ...
- Jmeter接口测试流程详解(中科软测认证中心)
1.jmeter简介 Jmeter是由Apache公司开发的java开源项目,所以想要使用它必须基于java环境才可以: Jmeter采用多线程,允许通过多个线程并发取样或通过独立的线程对不同的功能同 ...
- redis 2 主从和哨兵
主从: 概念:将一台redis服务器数据复制到其他redis服务器,前者是master,后者是slave.数据复制是单向,从主节点复制到从节点.master以写为主,slave以读为主一个zhu主节点 ...
- 论文解读(GMIM)《Deep Graph Clustering via Mutual Information Maximization and Mixture Model》
论文信息 论文标题:Deep Graph Clustering via Mutual Information Maximization and Mixture Model论文作者:Maedeh Ahm ...