Java学习笔记之集合(九):TreeMap的存储原理

来源:互联网 发布:中国男人 外国 知乎 编辑:程序博客网 时间:2024/06/05 09:26
package com.collection.map;import java.util.Comparator;import java.util.TreeMap;import org.junit.Test;/*双列集合体系:------| Map:如果是实现了Map接口的集合类,具备的特点:存储的数据都是以键值对的方式存在的,键不可重复,值可以重复;---------| HashMap:底层也是基于哈希表实现的;此处的哈希表存在两列,值列和键列;---------| TreeMap:TreeMap也是基于红黑树(二叉树)数据结构实现的;特点:会对元素的键进行排序存储;TreeMap注意事项:1、往TreeMap添加元素的时候,如果元素的键具备自然顺序,那么就按照键的自然顺序特性进行排序存储;2、往TreeMap添加元素的时候,如果元素的键不具备自然顺序,那么键所属的类就必须要实现Comparable接口,并重写 compareTo()方法,将自定义比较规则定义在该方法中;3、往TreeMap添加元素的时候,如果元素的键不具备自然顺序,而且键所属的类也没有实现Comparable接口,那么就必须在创建TreeMap对象的时候,传入一个比较器,并且比较器中定义了比较规则;4、如果同时实现了Comparable接口和Comparator接口,则比较规则以Comparator为准;---------| HashTable:底层也是依赖哈希表实现的,和HashMap一样,但是他是线程安全的,效率较低,已经被淘汰了; */class Emp implements Comparable<Emp>{String name;int salary;public Emp(String name, int salary) {this.name = name;this.salary = salary;}@Overridepublic String toString() {return "[name=" + name + ", salary=" + salary + "]";}// 自定义比较规则@Overridepublic int compareTo(Emp o) {return this.salary - o.salary;}}// 自定义比较器class MyComparator implements Comparator<Emp>{@Overridepublic int compare(Emp o1, Emp o2) {return o1.salary - o2.salary;}}public class Demo3 {// TreeMap注意事项2:实现Comparable接口;@Testpublic void test1() {TreeMap<Emp, String> map = new TreeMap<Emp, String>();map.put(new Emp("张三", 1000),  "001");map.put(new Emp("李四", 2000),  "002");map.put(new Emp("王五", 3000),  "003");System.out.println("集合中的元素:" + map);}// TreeMap注意事项3:实现Comparator接口(自定义比较器)@Testpublic void test2() {// 创建自定义比较器对象MyComparator comparator = new MyComparator();// 创建TreeMap对象的时候,传入自定义比较器TreeMap<Emp, String> map = new TreeMap<Emp, String>(comparator);map.put(new Emp("张三", 1000),  "001");map.put(new Emp("李四", 2000),  "002");map.put(new Emp("王五", 3000),  "003");System.out.println("集合中的元素:" + map);}}

原创粉丝点击