标签搜索

目 录CONTENT

文章目录

Java Map

胖头鱼
2022-10-01 / 0 评论 / 0 点赞 / 12 阅读 / 1,231 字 / 正在检测是否收录...

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

注意点

因为底层采用红黑色,所以需要对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);    }}
0

评论区