HashMap
含义
key-value结构
常用方法
put
get
isEmpty
size
containsKey
containsValue
clear
remove
示意图
案例
public class HashMapDemo {
//HashMap
//含义:key-value结构
//底层
//数组+单向链表
//Map
//HashMap
//初步使用
//常用方法
//put
//get
//isEmpty
//size
//containsKey
//containsValue
//clear
//remove
public static void main(String[] args) {
HashMap data = new HashMap();
data.put("name", "zhangsan");
data.put("age",18);
data.put("address", "广东");
System.out.println(data.get("name"));
System.out.println(data.get("age"));
System.out.println(data.get("address"));
System.out.println(data.isEmpty()); //false
System.out.println(data.size()); //3
System.out.println(data.containsKey("name")); //true
System.out.println(data.containsValue("广东")); //true
data.remove("name");
System.out.println(data);
//data.clear();
//遍历
System.out.println("---------------------方式一-----------------");
Set keies = data.keySet();
//理解为类似list,此处包含所有的key
for(Object key : keies){
System.out.println(key+"======="+data.get(key));
}
System.out.println("---------------------方式二-----------------");
Collection values = data.values();
for(Object value : values){
System.out.println(value);
}
System.out.println("---------------------方式三-----------------");
//<Entry>代表此时set里面的每个元素的类型是Entry
Set<Entry> entries = data.entrySet();
for(Entry entry : entries){
System.out.println(entry.getKey()+"========="+entry.getValue());
}
}
}
LinkedHashMap
含义
有序的HashMap
案例
public class LinkedHashMapDemo {
//LinkedHashMap
//继承HashMap
//特点:有序
public static void main(String[] args) {
Map data = new LinkedHashMap();
data.put(33,33);
data.put("aa","aa");
data.put("ff","ff");
data.put("dd","dd");
data.put("cc","cc");
data.put("11","11");
data.put("22","22");
System.out.println(data);
}
}
HashTable
含义
- 重量级的HashMap【线程安全的HashMap】
- 里面的方法都是加了synchronized
注意
- 里面的方法都是加了synchronized
- key和value都不能 null
体系结构
- Map
- Hashtable
案例
package com.neu.day08._03map;
import java.util.Hashtable;
public class HashTableDemo {
//含义:重量级的HashMap【线程安全的HashMap】
//里面的方法都是加了synchronized
//注意点
//里面的方法都是加了synchronized
//key和value都不能 null
//体系结构
//Map
//HashTable
public static void main(String[] args) {
Hashtable data = new Hashtable();
data.put("name","zs");
System.out.println(data.get("name"));
}
}
TreeMap
含义
底层采用红黑树[红黑树是一种平衡二叉树的实现]
体系结构
- Map
- SortedMap
- TreeMap
- SortedMap
注意点
因为底层采用红黑色,所以需要对key进行排序,有两个方式可以对key进行排序,分别如下:
- key实现java.lang.Comparable接口
- 在TreeMap构造器中传递一个比较器
案例一
public class TreeMapDemo {
//体系结构
//Map
//SortedMap
//TreeMap
public static void main(String[] args) {
TreeMap data = new TreeMap();
data.put("name","zhangsan");
data.put("age",10);
System.out.println(data.get("name"));
System.out.println(data.size());
System.out.println(data.isEmpty());
System.out.println(data.containsKey("name"));
System.out.println(data.containsValue("zhangsan"));
//其他方法自行尝试
}
}
案例二
public class TreeMapOtherDemo {
//体系结构
//Map
//SortedMap
//TreeMap
//注意点
//放入的key要具体比较性
//有序
//放入进入的和拿出的顺序是一样
//放入进入的会按照一定的规则排好序
//方案
//将key实现Comporable接口
//在构造器传递一个比较器
public static void main(String[] args) {
/*
TreeMap data = new TreeMap();
data.put("aa", "aa");
data.put("ee", "ee");
data.put("cc", "cc");
System.out.println(data);
*/
TreeMap data = new TreeMap();
User user1 = new User("zs", 10);
User user2 = new User("ls", 20);
data.put(user1, "zhangsan");
data.put(user2, "lisi");
System.out.println(data);
TreeMap studentData = new TreeMap(new MyComparator());
Student student1 = new Student("zs",10);
Student student2 = new Student("ls",20);
studentData.put(student1, "zs");
studentData.put(student2, "ls");
System.out.println(studentData);
}
}
class User implements Comparable<User>{
public int num;
public String name;
public User(String name,int num){
this.name = name;
this.num = num;
}
@Override
public String toString() {
return "User [num=" + num + ", name=" + name + "]";
}
//0代表
@Override
public int compareTo(User o) {
return this.num == o.num ? 0 :(this.num < o.num ? 1:-1);
}
}
class MyComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Student stu1 = (Student) o1;
Student stu2 = (Student) o2;
return stu1.num==stu2.num?0:(stu1.num>stu2.num?-1:1);
}
}
class Student{
public int num;
public String name;
public Student(String name,int num){
this.name = name;
this.num = num;
}
@Override
public String toString() {
return "Student [num=" + num + ", name=" + name + "]";
}
}
还有几个比较常见的属性,老师没讲
Map 自带的forEach方法
hashMap.forEach((k,v)->{
System.out.println("Key:" + k + " Value:" + v);
});
hashMap.compute()
compute() 方法对 hashMap 中指定 key 的值进行重新计算。
compute() 方法的语法为:
hashmap.compute(K key, BiFunction remappingFunction)
返回值如果 key 对应的 value 不存在,则返回该 null,如果存在,则返回通过 remappingFunction 重新计算后的值。实例以下实例演示了 compute() 方法的使用:实例import java.util.HashMap;class Main { public static void main(String[] args) { //创建一个 HashMap HashMap<String, Integer> prices = new HashMap<>(); // 往HashMap中添加映射项 prices.put("Shoes", 200); prices.put("Bag", 300); prices.put("Pant", 150); System.out.println("HashMap: " + prices); // 重新计算鞋子打了10%折扣后的值 int newPrice = prices.compute("Shoes", (key, value) -> value - value * 10/100); System.out.println("Discounted Price of Shoes: " + newPrice); // 输出更新后的HashMap System.out.println("Updated HashMap: " + prices); }}
评论区