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. Asp.Net Core学习笔记:(二)视图、模型、持久化、文件、错误处理、日志

    TagHelper 入门 优点:根据参数自动生成,不需要手写超链接,类似Django模板里面的url命令. 在ViewImport中添加TagHelper @addTagHelper *,Micros ...

  2. Python2和Python3编码的区别

    Python2 python2中有两种储存变量的形式,第一种:Unicode:第二种:按照coding头来的. 假设python2用utf8存储x='中文',当你print(x)的时候,终端接收gbk ...

  3. Kubernetes-1.概述

    内容主要摘自官网文档资料 官方地址 概述Kubernetes基本信息 前提条件: 掌握容器或Docker知识 文档编写基于kubernetes v1.17版本 目录 概述 Kubernetes对象 K ...

  4. Android中Context样式分析

    目录 1.样式定义以及使用 1.1.默认样式 1.2.样式定义及使用 1.3.当前样式下attr属性的获取 1.4.属性集合的定义与获取 2.Activity中Theme的初始化流程 2.1.系统调用 ...

  5. Spring Security 整合 微信小程序登录的思路探讨

    1. 前言 原本打算把Spring Security中OAuth 2.0的机制讲完后,用小程序登录来实战一下,发现小程序登录流程和Spring Security中OAuth 2.0登录的流程有点不一样 ...

  6. FreeBSD 镜像站问题 @2021

    主要问题在于官方无论如何也不开放 rsync 且不接受镜像站的官方二级镜像申请. 多次联系均无二次联系,如邮件列表,大概五次,其中三次回应,两次无回应.其主要回复内容为"深表歉意,但台湾地区 ...

  7. 修改 Hosts 解决 Github 访问缓慢问题

    背景 最近访问 Github 经常出现访问速度慢的问题,甚至会出现无法连接的情况.有一天,在一次家常聊天中提到了这个事情,有一位热心的 Gitee 朋友就说:你改一下 Hosts 文件就可以了.修改了 ...

  8. CentOS7.8搭建STF

    安装命令插件(rz.sz): yum install -y lrzsz wget unzip zip编辑配置文件导致命令无法使用时:export PATH=/usr/local/sbin:/usr/l ...

  9. python基础学习之描述符和装饰器

    描述符的了解: 描述符协议: python描述符是一个"绑定行为"的对象属性,在描述符协议中,它可以通过方法重写属性的访问.这些方法有: __get__, __set__, 和__ ...

  10. 10、Spring教程之整合MyBatis

    1.步骤 1.导入相关jar包 junit <dependency> <groupId>junit</groupId> <artifactId>juni ...