TreeMap使用和底层原理_Comparable接口_HashTable特点

本文详细解析了TreeMap和HashMap的实现原理与使用场景。TreeMap基于红黑树实现,适用于需要排序的Map集合,而HashMap则提供更高的效率,但不保持元素顺序。此外,还对比了HashMap和HashTable的异同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TreeMap是红黑二叉树的典型实现,我们打开TreeMap的源代码,发现里面有一行核心代码:
  root用来存储整树的根节点。我们继续跟踪Entry(是TreeMap的内部类)的代码:(jdk1.6),1.8版本中为Node,

 

TreeMap 和 HashMap 实现了同样的 Map接口,,用法对于调用者没有什么区别,HashMap 的效率高于 TreeMap,在需要排序的Map 采用到 TreeMap

 

package com.jianshun;

import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.Callable;

/**
 * 测试TreeMap的使用
 * @author Administrator
 *
 */
public class TestTreeMap {

	public static void main(String[] args) {
		Map<Integer,String> treemap1 = new TreeMap<Integer,String>();
		treemap1.put(20, "aa");
		treemap1.put(3, "bb");
		treemap1.put(6, "cc");
		
		//按照KEY递增的方式排序
		for(Integer key : treemap1.keySet()){
			System.out.println(key+"--"+treemap1.get(key));
		}
		
		Map<Emp,String> treemap2 = new TreeMap<Emp,String>();
		treemap2.put(new Emp(100, "张三",50000),"张三是一个好家伙");
		treemap2.put(new Emp(200 ,"李四",5000), "李四工作不积极");
		treemap2.put(new Emp(150,"王五",6000), "王五工作还不错");
		treemap2.put(new Emp(50,"赵六",6000), "赵六工作还不错");
		
		//按照KEY递增的方式排序
		for(Emp key : treemap2.keySet()){
			System.out.println(key+"--"+treemap2.get(key));
		}		

	}

}

//当key是一个自定义对象时;
class Emp implements Comparable<Emp>{
	int id;
	String name;
	double salary;

	public Emp(int id, String name, double salary) {
		super();
		this.id = id;
		this.name = name;
		this.salary = salary;
	}
	
	public int compareTo(Emp o) {//负数:小于,0:等于,整数:大于
		if(this.salary > o.salary){
			return 1;
		}else if(this.salary < o.salary){
			return -1;
		}else{// salary相等在比较id
			if(this.id > o.id){
				return 1;
			}else if(this.id < o.id){
				return -1;
			}else{
				return 0;
			}
		}
	}

	@Override
	public String toString() {
		return "Emp [id=" + id + ", name=" + name + ", salary=" + salary + "]";
	}

}

// Emp [id=200, name=李四, salary=5000.0]--李四工作不积极
// Emp [id=50, name=赵六, salary=6000.0]--赵六工作还不错
// Emp [id=150, name=王五, salary=6000.0]--王五工作还不错
// Emp [id=100, name=张三, salary=50000.0]--张三是一个好家伙

 

HashMap 和 HashTable 的用法几乎一样,底层实现几乎一样,只不过HashTable 的方法添加了synchronized 关键字确保线程同步检查,效率较低。

HashMap 和 HashMap 的区别:

     1:HashMap:线程不安全,效率高,允许 key 或者 value 为 null,

      2:HashMap:线程安全,效率低。不允许 key 或者 value 为 null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值