TreeMap介绍

TreeMap 类实现了Map接口,和HashMap类类似。

TreeMap是一个基于Red-Black tree的可导航map的实现。 它基于key的自然顺序排序。

TreeMap和HashMap在排序上。

TreeMap是非线程同步的。

类定义

public class TreeMap<K,V>

extends AbstractMap<K,V>

implements NavigableMap<K,V>, Cloneable, Serializable

例子介绍

package com.dylan.collection;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap; /**
* @author xusucheng
* @create 2018-02-03
**/
public class TreeMapExample {
public static void main(String args[]) { /* This is how to declare TreeMap */
TreeMap<Integer, String> tmap =
new TreeMap<>(); /*Adding elements to TreeMap*/
tmap.put(1, "Data1");
tmap.put(23, "Data2");
tmap.put(70, "Data3");
tmap.put(4, "Data4");
tmap.put(2, "Data5"); /* Display content using Iterator*/
Set set = tmap.entrySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()) {
Map.Entry mentry = (Map.Entry)iterator.next();
System.out.print("key is: "+ mentry.getKey() + " & Value is: ");
System.out.println(mentry.getValue());
} }
}

如何让TreeMap按value排序

package com.dylan.collection;

import java.util.*;

/**
* @author xusucheng
* @create 2018-02-03
**/
public class TreeMapSortByValue {
//Method for sorting the TreeMap based on values
public static <K, V extends Comparable<V>> Map<K, V>
sortByValues(final Map<K, V> map) {
Comparator<K> valueComparator =
new Comparator<K>() {
public int compare(K k1, K k2) {
int compare =
map.get(k1).compareTo(map.get(k2));
if (compare == 0)
return 1;
else
return compare;
}
}; Map<K, V> sortedByValues =
new TreeMap<K, V>(valueComparator);
sortedByValues.putAll(map);
return sortedByValues;
}
public static void main(String args[]) { TreeMap<String, String> treemap = new TreeMap<String, String>(); // Put elements to the map
treemap.put("Key1", "Jack");
treemap.put("Key2", "Rick");
treemap.put("Key3", "Kate");
treemap.put("Key4", "Tom");
treemap.put("Key5", "Steve"); // Calling the method sortByvalues
Map sortedMap = sortByValues(treemap); // Get a set of the entries on the sorted map
Set set = sortedMap.entrySet(); // Get an iterator
Iterator i = set.iterator(); // Display elements
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}
}
}

如何让TreeMap按Key倒序迭代

package com.dylan.collection;

import java.util.*;

/**
* @author xusucheng
* @create 2018-02-03
**/
public class TreeMapOrderByKeyDesc {
public static void main(String args[]) { Map<String, String> treemap =
new TreeMap<String, String>(Collections.reverseOrder()); // Put elements to the map
treemap.put("Key1", "Jack");
treemap.put("Key2", "Rick");
treemap.put("Key3", "Kate");
treemap.put("Key4", "Tom");
treemap.put("Key5", "Steve"); Set set = treemap.entrySet();
Iterator i = set.iterator();
// Display elements
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}
}
}

如何获取TreeMap的子集

package com.dylan.collection;

import java.util.SortedMap;
import java.util.TreeMap; /**
* @author xusucheng
* @create 2018-02-03
**/
public class TreeMapSubMap {
public static void main(String args[]) { // Create a TreeMap
TreeMap<String, String> treemap =
new TreeMap<String, String>(); // Put elements to the map
treemap.put("Key1", "Jack");
treemap.put("Key2", "Rick");
treemap.put("Key3", "Kate");
treemap.put("Key4", "Tom");
treemap.put("Key5", "Steve");
treemap.put("Key6", "Ram"); // Displaying TreeMap elements
System.out.println("TreeMap Contains : " + treemap); // Getting the sub map
/* public SortedMap<K,V> subMap(K fromKey,K toKey): Returns
* a view of the portion of this map whose keys range from
* fromKey, inclusive, to toKey, exclusive.
* (If fromKey and toKey are equal, the returned map is empty.)
* The returned map is backed by this map, so changes in the
* returned map are reflected in this map, and vice-versa.
* The returned map supports all optional map operations that
* this map supports.
*/
SortedMap<String, String> sortedMap = treemap.subMap("Key2","Key5");
System.out.println("SortedMap Contains : " + sortedMap); // Removing an element from Sub Map
sortedMap.remove("Key4"); /* Displaying elements of original TreeMap after
* removing an element from the Sub Map. Since Sub Map is
* backed up by original Map, the element should be removed
* from this TreeMap too.
*/
System.out.println("TreeMap Contains : " + treemap);
}
}

Java集合框架学习(九) TreeMap详解的更多相关文章

  1. Java集合框架学习(一)List

    先附一张Java集合框架图. 从上面的集合框架图可以看到,Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Coll ...

  2. Java集合框架学习

    集合框架 集合框架的目标 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现必须是高效的. 该框架允许 不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的扩展和适应必 ...

  3. Java 集合Collection与List的详解

    1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...

  4. 【java基础 11】java集合框架学习

    导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...

  5. java集合的方法及使用详解

    一.java集合的分类及相互之间的关系 Collection接口:向下提供了List和Set两个子接口 |------List接口:存储有序的,存储元素可以重复 |------ArrayList(主要 ...

  6. java提高篇(九)-----详解匿名内部类

    在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始 ...

  7. Java集合框架学习笔记

    集合类的由来:对象用于封装特有数据,对象多了需要存储,如果对象的长度不确定,就使用集合存储. 集合特点1.用于存储对象的容器.2.集合的长度可变.3.集合中不可以存储基本类型 集合容器因为内部的数据结 ...

  8. Java后端框架之Spring Boot详解,文末有Java分布式实战项目视频可取

    在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大. 用过 Spring 框架的都知道 Spring 能流行是因为它的两 ...

  9. Java集合框架学习总结

    转自:http://www.cnblogs.com/oubo/archive/2012/01/07/2394639.html Oubo的博客 以下介绍经常使用的集合类,这里不介绍集合类的使用方法,只介 ...

  10. 《Java Spring框架》SpringXML配置详解

    Spring框架作为Bean的管理容器,其最经典最基础的Bean配置方式就是纯XML配置,这样做使得结构清晰明了,适合大型项目使用.Spring的XML配置虽然很繁琐,而且存在简洁的注解方式,但读懂X ...

随机推荐

  1. Jmeter学习之五_跟踪被测试服务器的performance

    Jmeter学习之五_跟踪被测试服务器的performance 背景 这几天简单学习了一些基本的测试过程. 可以实现一些简单基本的功能了. 今天晚上继续进行了jmeter的一些学习. 想着可以在测试人 ...

  2. Docker 运行 MongoDB的简单办法

    Docker 运行 MongoDB的简单办法 第一步拉取镜像 docker pull mongo 第二步创建自己的目录 地址 10.24.22.240 创建目录 mkdir /mongodb 第三步 ...

  3. 说透IO多路复用模型

    作者:京东零售 石朝阳 在说IO多路复用模型之前,我们先来大致了解下Linux文件系统.在Linux系统中,不论是你的鼠标,键盘,还是打印机,甚至于连接到本机的socket client端,都是以文件 ...

  4. 【主流技术】浅析 ElasticSearch7.x 的基本结构及应用(一)

    目录 前言 一.概述 1.1基本认识 1.2核心概念 对比关系型数据库 1.3倒排索引 例一: 例二: 1.4了解ELK 二.安装(基于 CentOS) 2.1安装声明 2.2 使用 Docker 安 ...

  5. 7.1 Windows驱动开发:内核监控进程与线程回调

    在前面的文章中LyShark一直在重复的实现对系统底层模块的枚举,今天我们将展开一个新的话题,内核监控,我们以监控进程线程创建为例,在Win10系统中监控进程与线程可以使用微软提供给我们的两个新函数来 ...

  6. 算法与数据结构-07-手写类HashTable

    package day05; import java.sql.SQLOutput; import java.util.Scanner; /** * 哈希表代码实现 */ public class Ha ...

  7. 【Docker内容大集合】Docker从认识到实践再到底层原理大汇总

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...

  8. 手撕红黑树 | 变色+旋转你真的明白了吗?【超用心超详细图文解释 | 一篇学会Red_Black_Tree】

    说在前面 我们也很久没有更新数据结构系列了,半年前博主重新深入学习了红黑树这个数据结构,一直想更新呈现给大家,最近也一直没有时间,今天红黑树它来了! 博主为了这篇博客,做了很多准备,试了很多画图软件, ...

  9. Leetcode刷题第四天-双指针-二分法

    15:三个数之和 链接:15. 三数之和 - 力扣(LeetCode) em...双冲for循环,从头去遍历,0-(a+b)是否在列表中,最终timeout 数组从小到大排序,设置三个指针,i从头遍历 ...

  10. Golang中make和new的区别

    1. 相同点 都是内建函数,都是在堆上分配内存,都需要传递类型参数 2. 不同点 传递的参数不一样,new函数只接收一个参数,make函数可以接收一个以上的参数 package main import ...