Map集合

Map集合

键值对集合,集合中按Key-Value键值对方式存储

HashMap类

特点
无序、key唯一、value允许重复、key和value允许为null
数据结构:
JDK7 : 数组+单向链表
JDK8+:数组+单向链表+红黑树
重要参数:
  1. 数组: Node<K, V>[ ] table 第一次默认16个,每次扩容2倍
  2. 加载因子(填充因子) : float loadFactor 默认0.75F
  3. 数组阈值 :int threshold 默认为0.75f
  4. 数组的元素个数 : int size
  5. 数组的最大容量 :int MAXIMUM_CAPACITY = 1 << 30
  6. hashmap生成红黑树的最小数组长度:int MIN_TREEIFY_CAPACITY = 64
扩容方式:
  1. 第一次扩容 ,数组为空,默认扩容16
  2. 链表长度 >8,并且数组长度<64,会产生数组扩容
  3. 添加元素后,数组存储的数据达到数组的阈值(数组容量*加载因子)原数组扩容为2倍

LinkedHashMap类

特点:键值对按照有序方式存储
数据结构:

JDK8+:数组+单向链表+红黑树
在HashMap的基础上,多维护了一条双向链表,用于存储顺序

TreeMap类

特点

按照key排序后存储

数据结构

使用红黑树存储

import java.util.Comparator;
import java.util.TreeMap;
import java.util.Map.Entry;

public class Test02 {
	public static void main(String[] args) {
		
		//根据默认比较规则,对key排序
//		TreeMap<User,Order> map = new TreeMap<User,Order>();
		
		//根据自定义的比较规则,对key排序
		TreeMap<User,Order> map = new TreeMap<User,Order>(new Comparator<User>() {
			@Override
			public int compare(User o1, User o2) {	
				if(o1.getIdCardNo().equals(o2.getIdCardNo())) {
					return o1.compareTo(o2);
				}
				return o1.getIdCardNo().compareTo(o2.getIdCardNo());
			}			
		});
		//
		map.put(new User("z张飞", "147", 15),new Order());
		map.put(new User("m马超", "622", 10),new Order());
		map.put(new User("l吕布", "147", 15),new Order());
		map.put(new User("g关羽", "148", 20),new Order());
		map.put(new User("c曹操", "156", 30),new Order());
		map.put(new User("c曹操", "188", 30),new Order());
		
		//遍历map
		for (Entry<User,Order>  entry : map.entrySet()) {
			System.out.println(entry);
			
		}
	}
}

//User类
public class User implements Comparable<User>{
	private String userName; // 用户姓名
	private String idCardNo; // 身份证ID
	private int userLevel; // 用户等级
	
	public User(String userName,String idCardNo,int userLevel) {
		this.userName = userName;
		this.idCardNo = idCardNo;
		this.userLevel = userLevel;
	}@Override
	public int compareTo(User o) {		
		return this.userName.compareTo(o.userName);
	}

	@Override
	public String toString() {
		return "用户信息 [用户姓名=" + userName + ", 身份证ID=" + idCardNo + ", 用户等级=" + userLevel + "]";
	}


	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getIdCardNo() {
		return idCardNo;
	}
	public void setIdCardNo(String idCardNo) {
		this.idCardNo = idCardNo;
	}
	public int getUserLevel() {
		return userLevel;
	}
	public void setUserLevel(int userLevel) {
		this.userLevel = userLevel;
	}
}

//Order类
import java.time.LocalDateTime;
import java.util.UUID;

public class Order{
	private LocalDateTime creationDatetime; // 订单时间
	private String orderNo; // 订单编号
	
	public Order() {
		creationDatetime = LocalDateTime.of(2023, (int)(Math.random()*12)+1, (int)(Math.random()*30)+1, (int)(Math.random()*24)+1, (int)(Math.random()*59)+1);
		orderNo = UUID.randomUUID().toString();
	}

	@Override
	public String toString() {
		return "订单  [订单时间=" + creationDatetime + ", 订单编号=" + orderNo + "]";
	}

	public LocalDateTime getCreationDatetime() {
		return creationDatetime;
	}
	public void setCreationDatetime(LocalDateTime creationDatetime) {
		this.creationDatetime = creationDatetime;
	}
	public String getOrderNo() {
		return orderNo;
	}
	public void setOrderNo(String orderNo) {
		this.orderNo = orderNo;
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值