Day11_50_SortedMap集合
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集合的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- .Net多线程编程—并发集合
并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- java基础_集合List与Set接口
List接口继承了Collection的方法 当然也有自己特有的方法向指定位置添加元素 add(索引,添加的元素); 移除指定索引的元素 remove(索引) 修改指定索引的元素 set ...
- Java基础Collection集合
1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:
- 轻量级“集合”迭代器-Generator
Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...
- Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合
今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...
- 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)
在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...
随机推荐
- ElasticSearch 聚合分析
公号:码农充电站pro 主页:https://codeshellme.github.io ES 中的聚合分析(Aggregations)是对数据的统计分析功能,它的优点是实时性较高,相比于 Hadoo ...
- JVisualVM监控JVM-外网服务器
环境说明: a:阿里云服务器Centos8.2 b:JDK1.8 1:增加JMV运行参数 java -jar 启动时添加一下参数: -Djava.rmi.server.hostname=外网IP地址 ...
- MySQL学习笔记(五)
倒数第二天!冲冲冲!!! 一.索引 一个表里面可以有多个索引. 1. 索引的作用:约束与加速查找 无索引:从前到后依次查找 有索引:会为索引列创造一个额外文件(以某种格式存储).在使用索引进行查找时, ...
- Django批量插入数据和分页器
目录 一.ajax结合sweetalert实现删除按钮动态效果 二.bulk_create批量插入数据 1. 一条一条插入 2. 批量插入 三.自定义分页器 一.ajax结合sweetalert实现删 ...
- docker里运行docker命令
一.概述 现有环境的jenkins是在docker里面运行的,需要执行docker相关命令才行. 关于基于docker搭建jenkins,请参考链接: https://www.cnblogs.com/ ...
- LeetCode-二叉树的镜像
二叉树的镜像 二叉树的镜像 给定一个二叉树,输出二叉树的镜像. 只需要使用一个简单的递归,分别对左右子树反转后再对当前结点进行反转. #include<iostream> #include ...
- LeetCode-[list-of-depth-lcci]
特定深度节点链表-求解每一层二叉树从左到右遍历形成的链表 list-of-depth-lcci 这是关于二叉树的问题,遍历每一层的结点并且存在链表中. 可以采取队列类似于广度优先搜索的方法进行搜索.每 ...
- pytorch(08)数据模型的读取(2)
import numpy as np import torch import os import random from PIL import Image from torch.utils.data ...
- 2020年12月-第02阶段-前端基础-CSS Day02
CSS Day02 复合选择器 后代选择器 并集选择器 1. CSS复合选择器 理解 理解css复合选择器分别的应用场景 为什么要学习css复合选择器 CSS选择器分为 基础选择器 和 复合选择器 , ...
- Spark SQL中Not in Subquery为何低效以及如何规避
首先看个Not in Subquery的SQL: // test_partition1 和 test_partition2为Hive外部分区表 select * from test_partition ...