4.29Java TreeMap
2021/4/30 22:25:41
本文主要是介绍4.29Java TreeMap,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
4.29Java TreeMap
TreeMap概念
TreeMap是红黑二叉树的典型实现,打开TreeMap源码:
private transient Entry<k,V> root = null;
root用来存储树的根节点(Entry是TreeMap的内部类())
Entry Code
static final class Entry<K,V> implements Map,Entry<K,V>{ K key; V value; Entry<K,V> left = null; Entry<K,V> right = null; Entry<K,V> parent; boolean color = BLACK; }
从源码看TreeMap结构:
属性:
-
左节点
-
右节点
-
父节点
-
节点颜色---红黑二叉树
TreeMap的put和remove方法大量使用了红黑树的理论---深入学习红黑树理论---在需要排序的Map时才选用TreeMap
Emloyee类:
package collection.map.TreeMap; /* 因为key可以是任意对象,treemap是递增的方式排序 如果key的值为类会如何排序? 新的接口---comparable */ /*定义一个新的类*/ public class Employee implements Comparable<Employee>{ //定义它的属性 int id; String name; double salary; /*以Employee为key,按照salary排序--->需要实现comparable接口*/ /*构造器*/ public Employee(int id, String name, double salary){ super(); this.id = id; this.name = name; this.salary = salary; } /*重写toString方法*/ @Override public String toString(){ return "id:" + id + ",name:" + name + ",salary:" + salary; } /*实现接口当中未实现的方法*/ @Override public int compareTo(Employee o){ //TODO Auto-generated method stub //负数 : 小于, 0 : 等于, 正数 : 大于--->1 -1 0代替 //比较salary if (salary > o.salary){ //返回值 return 1; }else if (salary < o.salary){ return -1; }else { //如果工资相等利用id排序 if (this.id > o.id){ return 1; }else if (this.id < o.id){ return -1; }else { return 0; //相等 } } } }
TreeMap类:
package collection.map.TreeMap; import java.util.Map; /** * 测试TreeMap的使用 * @author Lucifer */ public class TreeMap { public static void main(String[] args) { //新建Map对象 Map<Integer,String> treemap1 = new java.util.TreeMap<>(); //利用put方法往里面放入链表 treemap1.put(20,"aa"); treemap1.put(3,"bb"); treemap1.put(6,"cc"); /*对Map进行遍历---对链表遍历(可以使用增强for循环)*/ //按照key递增的方式进行排序 for (Integer key : treemap1.keySet()){ //keySet返回的是一个Set集合,放到临时变量里面 System.out.println(key + "---" + treemap1.get(key)); //打印结果按照key递增的方式进行排序然后打印出来 } /*定义一个新的对象---新的Map*/ Map<Employee, String> treemap2 = new java.util.TreeMap<>(); //put方法往里面添加链表内容 treemap2.put(new Employee(100,"Lucifer",100000),"他好坏呀!"); treemap2.put(new Employee(200,"James",90000),"还可以!"); treemap2.put(new Employee(300,"Harden",80000),"真不戳!"); treemap2.put(new Employee(400,"Kevin",80000),"我带你们打!"); //薪水相同会按照id递增的方式排序 /*在进行一个排序--->按照key递增进行排序--->key是Employee对象--->Employee对象递增的方法(Employee类定义了)*/ for (Employee key : treemap2.keySet()){ System.out.println(key + "---" + treemap2.get(key)); } } }
HashMap和HashTable
map接口有一个子类叫hashtable
特点:
-
hashmap是一个map接口的实现类!!!!!
-
hashmap采用hash算法实现,是map接口最常用的实现类!!!
-
hashmap在查找、删除、修改方面都有非常高的效率
HashMap和HashTable的区别
-
HashMap:线程不安全、效率高、允许key或value为null
-
HashTable:线程安全、效率低、不允许key或value为null
如果key是一个类那么就要实现compareble接口
这篇关于4.29Java TreeMap的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南