SortedMap集合

  • 二叉查找树二叉*衡树

    • 二叉查找树是一种有序的树,所有的左孩子的value值都是小于叶子结点的value值的,所有右孩子的value值都是大于叶子结点的。这样做的好处在于:如果需要按照键值查找数据元素,只要比较当前结点的value值即可(小

      于当前结点value值的,往左走,否则往右走),这种方式,每次可以减少一半的操作,所以效率比较高。

    • 比二叉查找树更进一步的是二叉*衡树,二叉*衡树除了保证有序外,还能够保持每个节点左右子树的高度相差不超过1。常见的*衡树有AVL树,Treap,红黑树,伸展树,等等。

    • 红黑树是在每个节点上增加一个存储位表示节点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接**衡的。

    • 在TreeMap中,就是使用了红黑树。(HashMap在一个数组元素位里的链表长度过长时,也会把链表转为红黑树来存储数据。

  • SortedMap是一个接口,TreeMap是 SortedMap下的实现类, SortedMap是无序不可重复的,但可以对Key部分自动排序。

  • SortedMap集合实现自动排序需要Key(类)实现Comparable接口,或者单独写一个比较器。

  • SortedMap集合接口 相比 Map接口,主要增加了 comparator() 等比较相关方法,在定义中指出返回的 Set 应该是有序的。

  • 代码实例

    - 主类
    
        ```
    import java.util.Iterator;
    import java.util.Set;
    import java.util.SortedMap;
    import java.util.TreeMap; public class SortedMapTest01 {
    public static void main(String[] args) { // 创建SortedMap集合
    SortedMap produceMap=new TreeMap(new ProductComporator()); //传入比较器 // 创建商品对象
    Product product1=new Product("ZARA 新款 男装 慢跑式腰身亚麻裤 08574423707",299);
    Product product2=new Product("CONVERSE匡威官方1970s米白色高帮经典帆布鞋三星标情侣款162053C",599);
    Product product3=new Product("New Balance多边形金属眼镜框防辐射*视眼镜架女可配镜片",432); // 将创建的对象添加到集合中
    produceMap.put(product1,2); //2 会自动装箱
    produceMap.put(product2,8);
    produceMap.put(product3,6); //查看集合的大小
    int size=produceMap.size();
    System.out.println(size); // 遍历集合 Set keySet=produceMap.keySet();
    Iterator iterator=keySet.iterator();
    while(iterator.hasNext()){
    Object keys=iterator.next();
    Object values=produceMap.get(keys);
    System.out.println(keys+"------->"+values+"件");
    } }
    }
  • 产品类 实现了Comparable接口


    public class Product implements Comparable{ //属性
    String name ;
    double price; //构造方法
    Product(){}
    Product(String name ,double price){
    this.name=name;
    this.price=price;
    } //重写toString()方法
    public String toString(){
    return "Product[商品名:"+name+" 商品价格:"+price+"]";
    } // 实现Comparable接口,重写 compareTo()方法,按照商品价格排序 @Override
    public int compareTo(Object o) {
    double price1=this.price;
    double price2=((Product)o).price;
    if(price1>price2){
    return 1;
    }else if(price1<price2){
    return -1;
    }else{
    return 0;
    }
    }

}

 - 单独写一个比较器

 ```

      import java.util.Comparator;

      //Product类的比较器
public class ProductComporator implements Comparator { @Override
public int compare(Object o1, Object o2) {
double price1=((Product)o1).price;
double price2=((Product)o2).price;
if(price1==price2){
return 0;
}else if(price1<price2){
return 1;
}else{
return -1;
} }
}

Day11_50_SortedMap集合的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. .Net多线程编程—并发集合

    并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...

  3. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  4. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  5. java基础_集合List与Set接口

    List接口继承了Collection的方法  当然也有自己特有的方法向指定位置添加元素   add(索引,添加的元素); 移除指定索引的元素   remove(索引) 修改指定索引的元素   set ...

  6. Java基础Collection集合

    1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:

  7. 轻量级“集合”迭代器-Generator

    Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...

  8. Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合

    今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...

  9. 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)

    在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...

随机推荐

  1. ADT基础(三)—— HashMap

    ADT基础(三)-- HashMap 1 哈希表 哈希表(hash table),也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维 ...

  2. ”capslock+“ 一款超级文本编辑外挂

    "capslock+" 一款超级文本编辑外挂 彻底释放大写锁定键"caps lock" 潜力的强大工具 一.基础功能 CapsLock按键与以下按键的组合 实现 ...

  3. docker的安装和基本的docker命令、镜像和容器的操作

    1.yum 包更新到最新 yum update 2.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum insta ...

  4. 京东 Vue3 组件库闪亮登场

    京东零售开源项目 NutUI 是一套京东风格的轻量级移动端 Vue 组件库,是开发和服务于移动 Web 界面的企业级产品.经过长时间的开发与打磨,NutUI 3.0 终于要和大家见面了!3.0 版本在 ...

  5. 【图像处理】使用OpenCV+Python进行图像处理入门教程(二)

    这篇随笔介绍使用OpenCV进行图像处理的第二章 图像的运算,让我们踏上继续回顾OpenCV进行图像处理的奇妙之旅,不断地总结.回顾,以新的视角快速融入计算机视觉的奥秘世界. 2  图像的运算 复杂的 ...

  6. 你不知道的Scheduled定时任务骚操作

    目录 一.什么是定时任务 二.项目依赖 三.注解式定时任务 3.1 cron 3.2 fixedDelay 3.3 fixedDelayString 3.4 fixedRate 3.5 fixedRa ...

  7. Nginx解析漏洞复现以及哥斯拉连接Webshell实践

    Nginx解析漏洞复现以及哥斯拉连接Webshell实践 目录 1. 环境 2. 过程 2.1 vulhub镜像拉取 2.2 漏洞利用 2.3 webshell上传 2.4 哥斯拉Webshell连接 ...

  8. LeetCode-宝石与石头

    宝石与石头 LeetCode-771 使用哈希表. 这里使用内置算法库中的map /** * 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头.  * S 中每个字符代表了一种你拥有的 ...

  9. CCF(除法):线段树区间修改(50分)+线段树点修改(100分)+线段树(100分)

    除法 201709-5 这道题有很多种方法来做,最常用的就是线段树和树状数组. 如果使用线段树来做,就会想到区间修改的update函数.但是这里可能会涉及到v是1或者a[j]是0的情况,所以用这种方法 ...

  10. 九. SpringCloud Stream消息驱动

    1. 消息驱动概述 1.1 是什么 在实际应用中有很多消息中间件,比如现在企业里常用的有ActiveMQ.RabbitMQ.RocketMQ.Kafka等,学习所有这些消息中间件无疑需要大量时间经历成 ...