1.put方法
put方法的细节:
- 添加/覆盖
- 在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回null
- 在添加数据的时候,如果键是存在的,那么会把原有的键值对对象覆盖,会把覆盖的值进行返回。
2.remove方法
String key = m.remove("郭靖");
System.out.println(key);
3.判断是否包含
boolean keyResult = m.containsKey("郭靖");
System.out.println(keyResult);
boolean valueResult = m.containsValue("小龙女");
System.out.println(valueResult);
4.判断是否为空
boolean result = m.isEmpty();
System.out.println(result);
5.集合的长度
int size = m.size();
System.out.println(size);
6.Map的遍历方式
1)键找值
package dailyTest;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author
* @createtime 2023/9/8 17:28
*/
public class A02_MapDemo2 {
public static void main(String[] args) {
//map集合的第一种遍历方式
//1.创建Map集合的对象
Map<String,String> map = new HashMap<>();
map.put("尹志平","22");
map.put("郭靖","11");
Set<String> keys = map.keySet();
// Iterator<String> iterator = keys.iterator();
// keys.forEach();
for (String key:keys){
System.out.println(key);
String value = map.get(key);
System.out.println(key+"="+value);
}
}
}
2)键值对
package dailyTest;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author
* @createtime 2023/9/11 18:18
*/
public class A03_MapDemo3 {
public static void main(String[] args) {
//map集合的第一种遍历方式
//1.创建Map集合的对象
Map<String,String> map = new HashMap<>();
//2.添加元素
map.put("尹志平","22");
map.put("郭靖","11");
// Set<String> keys = map.keySet();
// Iterator<String> iterator = keys.iterator();
// keys.forEach();
// 3.1通过一个方法获取所有的键值对对象,返回一个set集合
Set<Map.Entry<String, String>> entries = map.entrySet();
// 3.2遍历entries这个集合,去得到里面的每一个键值对对象
for (Map.Entry<String, String> entry : entries) {
// 3.3利用entry调用get方法获取键和值
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"="+value);
}
}
}
3)Lambda表达式
package dailyTest;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
/**
* @author
* @createtime 2023/9/11 18:18
*/
public class A04_MapDemo4 {
public static void main(String[] args) {
//map集合的第一种遍历方式
//1.创建Map集合的对象
Map<String,String> map = new HashMap<>();
//2.添加元素
map.put("尹志平","22");
map.put("郭靖","11");
// Set<String> keys = map.keySet();
// Iterator<String> iterator = keys.iterator();
// keys.forEach();
// 3利用lambda表达式进行遍历
map.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String key, String value) {
System.out.println(key+"="+value);
}
});
System.out.println("------------");
map.forEach((String key, String value) ->{
System.out.println(key+"="+value);
});
System.out.println("------------");
map.forEach(( key, value) -> System.out.println(key+"="+value));
}
}
7.Hashmap
7.1Hashmap的特点
- HashMap是Map里面的一个实现类
- 没有额外需要学习的特有方法,直接使用Map里面的方法就可以了
- 特点都是由键决定的:无序、不重复、无索引
- HashMap跟HashSet底层原理是一模一样的,都是哈希表结构
//Student.java
package dailyTest;
import java.util.Objects;
/**
* @author
* @createtime 2023/9/12 10:15
*/
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
@Override
public 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);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public String toString() {
return "Student{name = " + name + ", age = " + age + "}";
}
}
HashMapDemo5.java
//HashMapDemo5.java
package dailyTest;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
/**
* @author fanfangyu1
* @createtime 2023/9/12 10:17
*/
public class A05_HashMapDemo5 {
public static void main(String[] args) {
/**
* 需求:创建一个HashMap集合:键是学生对象(Student),值是籍贯(String)
* 存储3个键值对元素,并遍历
* 要求:同姓名,同年龄认为是同一个学生
* 核心点:
* HashMap的键位置如果存储的是自定义对象,需要重写hashCode和equals方法
*/
//1.创建HashMap的对象
HashMap<Student,String> hm = new HashMap<>();
//2.创建3个学生对象
Student s1 = new Student("zhangsan",23);
Student s2 = new Student("lisi",24);
Student s3 = new Student("wangwu",25);
//3.添加元素
hm.put(s1,"江苏");
hm.put(s2,"浙江");
hm.put(s3,"福建");
//4.遍历集合
Set<Student> keys = hm.keySet();
for(Student key:keys){
String value = hm.get(key);
System.out.println(key+"="+value);
}
System.out.println("-----------------");
Set<Map.Entry<Student, String>> entries = hm.entrySet();
for (Map.Entry<Student,String> entry:entries
) {
Student key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"="+"value");
}
System.out.println("-------------++++");
hm.forEach(new BiConsumer<Student, String>() {
@Override
public void accept(Student student, String s) {
System.out.println(student+"="+s);
}
});
}
}