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 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_7_HashMap存储自定义类型键值

    自定义类型做key值.必须要重写hashCode和equals方法 创建pserson类 有name个age两个成员变量.重写toString方法 key有重复,会被新的value值替换掉. key值 ...

  2. GreenDao存储自定义类型对象解决方案(转)

    最近公司项目选用GreenDao作为Android客户端本地数据库的对象关系映射框架.对于GreenDao虽然以往也有简单用过,但这还是笔者第一次在实际业务中使用.碰到了题目所述的两个问题,虽然在Tu ...

  3. HashSet存储自定义类型元素和LinkedHashSet集合

    HashSet集合存储自定义类型元素 HashSet存储自定义类型元素 set集合报错元素唯一: ~存储的元素(String,Integer,-Student,Person-)必须重写hashCode ...

  4. SortedDictionary<TKey, TValue> 类 表示根据键进行排序的键/值对的集合。

    SortedDictionary<TKey, TValue> 类   表示根据键进行排序的键/值对的集合. SortedDictionary<TKey, TValue> 中的每 ...

  5. 集合框架-Map集合-HashMap存储自定义对象

    1 package cn.itcast.p6.hashmap.demo; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 im ...

  6. struct 如何存储指针类型的值

    通过 __unsafe_unretained标示符标示指针类型的值,否则xcode会报以下错误(前提,你使用的是ARC模式): ARC forbids Objective-C objects in s ...

  7. 浅析HashSet add() 方法存储自定义类型对象的过程

    一.自定义一个Student类 package date0504; public class Student { private String id; Student(String id){ this ...

  8. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_5_HashSet存储自定义类型元素

    想存储的元素不重复,就必须重写hashCode和equals这两个方法 新建一个Person类.添加姓名和年龄这两个成员变量..get和set,有参和无参构造. 重点是重写了toString的方法 自 ...

  9. java——删除HashMap中所有的键值对

    第一种:❌(报错) import java.util.HashMap; import java.util.Set; public class T{ public static void main(St ...

随机推荐

  1. .NET桌面程序集成Web网页开发的多种解决方案

    系列目录     [已更新最新开发文章,点击查看详细] B/S架构的Web程序几乎占据了应用软件的绝大多数市场,但是C/S架构的WinForm.WPF客户端程序依然具有很实用的价值,如设计类软件 Au ...

  2. XCTF练习题---MISC---Hidden-Message

    XCTF练习题---MISC---Hidden-Message flag:Heisenberg 解题步骤: 1.观察题目,下载附件 2.拿到手以后发现是一个数据包格式,打开看一下 3.查看UDP流,并 ...

  3. Django前后端交互&数据验证

    一.前端--->后端 1.form表单 <form method="post" action="/test/?a=1&b=2"> {% ...

  4. 分布式存储之GlusterFS

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 1.glusterfs概述 GlusterFS系统是一个可扩展的网络文件系统,相比其他分布式文件系统,GlusterFS具有 ...

  5. 10个最危险的Linux命令,希望你牢记在心

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 来源:Linux迷链接:https://www.linu ...

  6. Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch64. path=/org/sqlite/native/Mac/aarch64

    编译项目报错: Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch ...

  7. 解读论文《Agglomerative clustering of a search engine query log》,以解决搜索推荐相关问题

    <Agglomerative clustering of a search engine query log> 论文作者:Doug Beeferman 本文将解读此篇论文,此论文利用搜索日 ...

  8. 手写vue路由

    目录 一.简易demo 二.Vue-Router传参方式 三.进阶-路由导航 一.简易demo // routes注册 import Vue from "vue"; // impo ...

  9. Cubieboard安装系统

    2013年买的一个小玩意. 一.硬件 1.1 相关资料 http://www.cubieforums.com http://cubie.cc 1.2 cubieboard1 1.3 无线网卡 水星 M ...

  10. C语言复习_01

    auto 存储类是所有局部变量默认的存储类,auto 只能用在函数内,即 auto 只能修饰局部变量. { int mount; auto int month; } register存储类用于定义存储 ...