HashMap存储自定义类型键值
Map必须是唯一的:
作为key的元素,必须重写hashCode方法和equal方法,以保证key唯一
定义一个Person类
public class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", 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;
}
}
定义一个main方法类
import java.util.HashMap;
import java.util.Set;
import java.util.Map;
public class demoHashMapSavePerson {
public static void main(String[] args) {
show01();
show02();
}
public static void show01(){
//创建HashMap集合
HashMap<String,Person> map=new HashMap<>();
//往集合中添加y元素
map.put("北京",new Person("张三",18));
map.put("上海",new Person("李四",19));
map.put("广州",new Person("王五",20));
map.put("北京",new Person("赵六",18));
//使用keySet加增强for遍历Map集合
Set<String> set=map.keySet();
for (String key:set){
Person value = map.get(key);
System.out.println(key+"-->"+value);
}
}
/*hashMap存储自定义类型键值
key:Person类型,那样就必须重写hashCode和equals方法以保证key是唯一的
value:String类型可以重复*/
private static void show02(){
//创建HashMap集合
HashMap<Person,String> map=new HashMap<>();
map.put(new Person("女王",18),"英国");
map.put(new Person("秦始皇",18),"秦国");
map.put(new Person("普京",30),"俄罗斯");
map.put(new Person("女王",18),"毛里求斯");
Set<Map.Entry<Person,String>> set=map.entrySet();
for (Map.Entry<Person,String> entry:set){
Person key=entry.getKey();
String value=entry.getValue();
System.out.println(key+"-->"+value);
}
}
}
LinkedHashMap使用方法以及与HashMap的区别
java.util.HashMap<K,V>extends HashMap<K,V>
Map接口的哈希表和链接列表实现,具有可预知的迭代顺序
底层原理:哈希表+链表(记录顺序)
import java.util.HashMap;
import java.util.LinkedHashMap;
public class demoLingkedHashMap {
public static void main(String[] args) {
HashMap<String,String> hashMap=new HashMap<>();
hashMap.put("aaa","aaa");
hashMap.put("ccc","ccc");
hashMap.put("bbb","bbb");
hashMap.put("aaa","ddd");
System.out.println(hashMap);
LinkedHashMap<String,String> liked=new LinkedHashMap<>();
liked.put("aaa","aaa");
liked.put("ccc","ccc");
liked.put("bbb","bbb");
liked.put("aaa","ddd");
System.out.println(liked);
}
}
Hashtable与其他集合的区别
java.util.Hashtable<K,V>集合implements Map<K,V>接口
Hashtable:底层也是一个哈希表是一个线程安全的集合,是单线程集合,速度慢
HashMap:底层是一个哈希表,是一个线程不安全的集合,速度快
HashMap集合(之前学过的所有集合):可以存储null值<null,null>
Hashtable集合,不能存储null值<null,null>
HashMap在存储自定义类型键值时,要求重写hashCode和equals方法以确保唯一性。LinkedHashMap是HashMap的子类,提供有序的迭代顺序。而Hashtable是线程安全但速度较慢的Map实现,不允许存储null键值对。
2104

被折叠的 条评论
为什么被折叠?



