Guava学习(十):区间

malloc()函数与free()函数的使用 引入 阅读详情

数学里的区间可以描述一个范围,guava中使用Range帮助我们实现了这种功能。

主要方法如下:
在这里插入图片描述
在这里插入图片描述

离散区间抽象类:DiscreteDomain,可以自己实现这个抽象类来创建特定的离散类。

代码示例:
RangeTest 类

package com.bluedragon.guavalearning.range;

import com.google.common.collect.BoundType;
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.Range;

/**
 * @author CodeRush
 * @date 2019/8/14 23:49
 */
public class RangeTest {

    public static void main(String[] args) {
        //创建一个空的开区间集合
        Range<Integer> open = Range.open(0, 1);
        Range<Integer> emptyRange = Range.closedOpen(5, 5);
        boolean empty = open.isEmpty();
        System.out.println(emptyRange.isEmpty());
        //是否为空集合
        System.out.println(empty);
        //是否包含
        boolean contains = open.contains(0);
        System.out.println(contains);
        //是否有下界
        boolean hasLowerBound = open.hasLowerBound();
        System.out.println(hasLowerBound);
        //是否有上界
        boolean hasUpperBound = open.hasUpperBound();
        System.out.println(hasUpperBound);

        //下界类型:CLOSED/OPEN 闭/开
        System.out.println(open.lowerBoundType());
        //上界类型
        System.out.println(open.upperBoundType());
        //下界值
        System.out.println(open.lowerEndpoint());
        //上界值
        System.out.println(open.upperEndpoint());

        Range<Integer> openTemp = Range.open(0, 3);
        System.out.println(openTemp.contains(1));
        try {
            Range<Integer> open2 = Range.open(0, 0);
        } catch (IllegalArgumentException e) {
            System.out.println("创建参数错误");
        }
        //闭区间
        Range<Integer> closed = Range.closed(1, 5);
        System.out.println(closed.lowerBoundType());
        System.out.println(closed.upperBoundType());
        System.out.println(closed.lowerEndpoint());
        System.out.println(closed.upperEndpoint());

        //左开右闭
        Range<Integer> openClosed = Range.openClosed(3, 10);
        System.out.println(openClosed);
        //左闭右开
        Range<Integer> closedOpen = Range.closedOpen(-5, 2);
        System.out.println(closedOpen);

        //最小(包含)-正无穷
        Range<Integer> atLeast = Range.atLeast(-1);
        System.out.println(atLeast);
        //负无穷-最大(包含)
        Range<Integer> atMost = Range.atMost(100);
        System.out.println(atMost);
        //负无穷-此值(小于说明不包含)
        Range<Integer> lessThan = Range.lessThan(99);
        System.out.println(lessThan);
        //此值(大于说明不包含)-正无穷
        Range<Integer> greaterThan = Range.greaterThan(0);
        System.out.println(greaterThan);

        //负无穷-正无穷
        Range<Comparable<?>> all = Range.all();
        System.out.println(all);
        //负无穷-上限(开闭自己指定)
        Range<Integer> upTo = Range.upTo(10, BoundType.CLOSED);
        System.out.println(upTo);
        //下限(开闭自己指定)-正无穷
        Range<Integer> downTo = Range.downTo(1, BoundType.OPEN);
        System.out.println(downTo);

        //只包含一个元素的区间,左右都是闭合的,单值区间
        Range<Integer> singleton = Range.singleton(1);
        System.out.println(singleton);
        //上下界及开闭都自己指定
        Range<Double> range = Range.range(1.0, BoundType.CLOSED, 123.22, BoundType.OPEN);
        System.out.println(range);

        /**交、并**/
        Range<Integer> open1 = Range.open(-1, 1);
        Range<Integer> closed1 = Range.closed(10, 15);
        Range<Integer> openClosed1 = Range.openClosed(-1, 11);
        Range<Integer> closedOpen1 = Range.closedOpen(0, 9);
        //区间是否包含了某区间
        System.out.println(open1.encloses(closed1));
        System.out.println(openClosed1.encloses(open1));
        System.out.println(closedOpen1.encloses(open1));
        //交集,如果没有交集会抛出非法参数异常
        try {
            Range<Integer> intersection = open1.intersection(closed1);
            System.out.println(intersection);
        } catch (IllegalArgumentException e) {
            System.out.println("没有交集,抛出非法参数异常");
        }
        Range<Integer> intersection1 = closed1.intersection(openClosed1);
        System.out.println(intersection1);

        //返回”同时包括两个区间的最小区间”,如果两个区间相连,那就是它们的并集。
        Range<Integer> span = open1.span(openClosed1);
        System.out.println(span);
        Range<Integer> span1 = closed1.span(openClosed1);
        System.out.println(span1);

        //判断是否有区间同时位于这两个区间之间->是否有交集
        System.out.println(open1.isConnected(closed1));
        System.out.println(open1.isConnected(openClosed1));
        System.out.println(Range.open(1, 2).isConnected(Range.open(2, 3)));


        //离散域
        System.out.println("=================离散域=================");
        DiscreteDomain<Integer> integers = DiscreteDomain.integers();
        //离散域中两个元素的距离
        System.out.println(integers.distance(0, 10));
        //离散域上界
        System.out.println(integers.maxValue());
        //离散域下界
        System.out.println(integers.minValue());
        //某个元素下一个
        System.out.println(integers.next(0));
        //某个元素上一个
        System.out.println(integers.previous(0));
        ContiguousSet<Integer> integerContiguousSet = ContiguousSet.create(Range.open(1, 9), integers);
        Range<Integer> integerRange = integerContiguousSet.range();
        System.out.println(integerRange);//[2‥8]
        System.out.println(integerContiguousSet.headSet(5).range());//[2‥4]
        System.out.println(integerContiguousSet.tailSet(5).range());//[5‥8]

        //自定义离散域
        EvenIntegerDiscreteDomain evenIntegerDiscreteDomain = new EvenIntegerDiscreteDomain(0, 100);
        System.out.println(String.format("next(5):%s,netx(4):%s,next(3):%s", evenIntegerDiscreteDomain.next(5),
                evenIntegerDiscreteDomain.next(4), evenIntegerDiscreteDomain.next(3)));
        System.out.println(String.format("previous(5):%s,previous(4):%s,previous(3):%s", evenIntegerDiscreteDomain.previous(5),
                evenIntegerDiscreteDomain.previous(4), evenIntegerDiscreteDomain.previous(3)));
        System.out.println(String.format("max:%s,min:%s", evenIntegerDiscreteDomain.maxValue(), evenIntegerDiscreteDomain.minValue()));
        System.out.println(String.format("evenIntegerDiscreteDomain.distance(3, 5):%s", evenIntegerDiscreteDomain.distance(3, 5)));
        System.out.println(String.format("evenIntegerDiscreteDomain.distance(3, 6):%s", evenIntegerDiscreteDomain.distance(3, 6)));

    }
}

自己实现的偶数离散类EvenIntegerDiscreteDomain

package com.bluedragon.guavalearning.range;

import com.google.common.collect.DiscreteDomain;

public class EvenIntegerDiscreteDomain extends DiscreteDomain<Integer> {

    private Integer min;
    private Integer max;

    public EvenIntegerDiscreteDomain(int min, int max) {
        min = min % 2 == 0 ? min : min - 1;
        max = max % 2 == 0 ? max : max - 1;
        this.min=min;
        this.max=max;
    }


    @Override
    public Integer next(Integer referValue) {
        int referEvenValue = referValue % 2 == 0 ? referValue : referValue - 1;
        int next = referEvenValue + 2;
        next = next > this.max ? this.max : next;
        return next;
    }

    @Override
    public Integer previous(Integer referValue) {
        int referEvenValue = referValue % 2 == 0 ? referValue : referValue - 1;
        int previous = referEvenValue - 2;
        previous = previous < this.min ? this.min : previous;
        return previous;
    }

    @Override
    public long distance(Integer first, Integer second) {
        first = first % 2 == 0 ? first : first - 1;
        second = second % 2 == 0 ? second : second - 1;
        return (second - first) / 2;
    }

    @Override
    public Integer minValue() {
        return this.min;
    }

    @Override
    public Integer maxValue() {
        return this.max;
    }
}

输出结果:

true
false
false
true
true
OPEN
OPEN
0
1
true
创建参数错误
CLOSED
CLOSED
1
5
(3‥10]
[-5‥2)
[-1‥+∞)
(-∞‥100]
(-∞‥99)
(0‥+∞)
(-∞‥+∞)
(-∞‥10]
(1‥+∞)
[1‥1]
[1.0‥123.22)
false
true
false
没有交集,抛出非法参数异常
[10‥11]
(-1‥11]
(-1‥15]
false
true
false
=================离散域=================
10
2147483647
-2147483648
1
-1
[2‥8]
[2‥4]
[5‥8]
next(5):6,netx(4):6,next(3):4
previous(5):2,previous(4):2,previous(3):0
max:100,min:0
evenIntegerDiscreteDomain.distance(3, 5):1
evenIntegerDiscreteDomain.distance(3, 6):2
malloc函数与free函数 链表这种数据结构在C语言中必不可少,它可以实现线性表的动态存储,而链表又要靠malloc函数来实现。 malloc函数: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 malloc函数的作用是让系统寻找空闲地址后为你分配一块指定大小的空间来给你使用,这一块空间其实要比你申请的空 阅读详情

相关推荐

Java工具库Guava的区间(范围Range)的构建、区间运算、查询运算、关系运算(包含、相连、交集、并集)的使用示例

在上面了解了Guava的基本使用以及在使用RangeMap时对范围Range有过初步的使用。下面看其他用法示例注:博客:关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。

BADAO_LIUMANG_QIZHI的博客 1983

Google Guava 区间工具使用详解

区间 区间创建 区间操作 区间关系判断 区间在集合中的使用 Range RangeSet RangeMap

骑个小蜗牛的博客 5032

你需要这样一个Ros软路由—— 路由器+外网+一号通ip线路=动态ip的WiFi信号

功能强大 管理便捷—给您全新的路由体验 一键更换指定线路or批量更换所有IP/MAC/SSID 自定义走本地网络策略的分流功能 设备批发价、不限制拨号账号服务商 强大的单设备/多设备IP去重功能 批量导入、管理一号通线路 一键任意切换5G_WiFi(推荐)/2.4G_WiFi(建议不用) 设备支持PPTP/L2TP/SSTP/openVP.N等协议 独家支持openVPN,适用于网络受限用户 支持自行接入AP和交换机扩容 一键打开/关闭所有虚拟WiFi 一键隐藏/显示设备WiFi...

米粒儿 4253

Guava:Range 区间范围工具

Range表示一个间隔或一个序列。它被用于获取一组数字/串在一个特定范围之内。可比较类型的区间API,包括连续和离散类型。Range 定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type)。比如1到100之间的整型数据。在数学里面的范围是有边界和无边界之分的;同样,在Guava中也有这个说法。如果这个范围是有边界的,那么这个范围又可以分为包括 开集(不包括端点)和 闭集(包括端点);如果是无解的可以用+∞表示。

qq_63815371的博客 1606

YOLOv8损失函数升级:从CIoU到Wise-IoU v3的实战调优与避坑指南

本文详细介绍了如何将YOLOv8的损失函数从CIoU升级到Wise-IoU v3,以提升目标检测性能,特别是在小目标检测和样本不均衡场景下的表现。通过实战调优步骤和避坑指南,帮助开发者有效应用Wise-IoU v3的动态聚焦机制和单调性控制,显著提升模型精度和训练稳定性。

weixin_33737774的博客 590

别再手动写JSON了!用Node-RED OPC UA节点5分钟搞定楼宇温湿度数据采集

本文介绍了如何利用Node-RED和OPC UA节点快速实现楼宇温湿度数据的自动化采集与JSON格式转换。通过可视化工具Node-RED,开发者无需编写复杂代码,5分钟内即可完成从传感器到数据输出的全流程配置,大幅提升智慧楼宇和工业物联网项目的实施效率。

weixin_30368405的博客 431

Guava工具集-Range范围区间工具类

最近在做规则校验,未避免不正常的数据出现,需要做范围校验。找了部分工具类,工具类能够支撑的较少,最后选择了Guava的Range类实现范围校验。可以计算区间是否连接,取交集,并集等操作。

这有一片海的博客 1266

CSP-J 初赛模拟卷1 题解

只有一棵子树有后继,其他的都是叶结点才能保证树的深度最大,此时还剩(n-5)个结点,最后加上2,得到(n-3),即为答案。题解:先修改p的指针域,让它的左指针域指向q,然后再让q的右指针域赋值给p的右指针域,再然后修改q的右指针域使其指向p,最后需要改变的指针域就是原先q结点的后继节点的左指针域内容。设n个元素的入栈序列是1,2,3,...,n,出栈序列为p1,p2,...,pn,若p1=n,则pi(1≤i≤n)的值为(1)输入的三个数中,第二个数应是[0,11]上的整数,否则会出现数组越界的问题。

Sat77GryHp_Pro的博客 2805

Google Guava Ranges(区间)

       区间,有时也称为范围。Guava用类型Range表示区间。所有区间实现都是不可变类型。接下来我们对Guava中的Range做一个简单的介绍。我们先看下Range类里面每个函数的介绍,在说具体的使用。 Range常用函数介绍 public final class Range<C extends Comparable> extend...

旧路 2373

RTA_OS基础功能讲解 2.6-资源锁和自旋锁

访问需要在任务和 ISR 之间共享的硬件或数据可能不可靠、不安全。这是因为当优先级较低的任务或 ISR 正在更新共享数据时,可能会发生任务或 ISR 抢占。这种情况被称为竞争条件,极难测试。访问共享数据的语句序列称为关键部分。要安全访问关键部分中引用的代码和数据,就需要执行互斥。换句话说,必须确保系统中没有其他任务或第 2 类 ISR 能够在关键部分期间抢占正在执行的任务。你可以将任务声明为非抢占式任务,这样就可以避免互斥问题。

本博客专注于嵌入式软件领域技术分享。 290

智能Agent如何重塑企业流程

在当今数字化时代,企业流程的效率和敏捷性至关重要。传统企业流程往往受限于人工操作,效率低下、成本高昂,难以适应快速变化的市场环境。智能Agent作为一种新兴技术,凭借其强大的智能化能力,正在逐渐改变企业流程的运作模式,为企业带来新的机遇和挑战。智能Agent是一种能够感知环境、自主决策、执行任务的软件实体。它可以模拟人类的智能行为,例如学习、推理、规划和沟通。通过将智能Agent嵌入到企业流程中,可以实现流程的自动化、优化和智能化,从而提高效率、降低成本、提升客户体验。8.1 研究成果总结。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 873

求教关于被调函数中的malloc与free

问题:在子函数中动态分配内存:p=(int*)malloc(a*sizeof(int)),这个函数的目的是返回p:return(p) 我想问问,该在什么地方进行free(p)呢?如果在子函数中的return前free是肯定不行的,在之后free?子函数的return之后,不就结束函数调用了吗?那时候free还会被子函数执行吗?

我不会编程,但不是完全不会,我会一点点 4718

基于VSCode+clangd插件打造高效C++开发环境之四:clangd配置

本文介绍如何配置VSCode+clangd插件进行高效C++开发。重点内容包括:1)生成compile_commands.json文件,通过ninja工具提取编译命令并使用gen_compdb脚本转换;2)配置clangd命令行参数,如设置后台索引、并行度等;3)编写.clangd配置文件,调整编译标志和诊断选项;4)添加.clang-format文件定义代码风格;5)在VSCode中添加远程服务器工作目录。配置完成后需重启clangd服务使更改生效。文章还提供了MTK/QCOM等不同平台生成compile

5070

malloc函数和free函数

malloc函数和free函数,顾名思义,就是用来分配和释放内存空间的函数。它们可以让我们在程序运行过程中动态地申请和释放内存空间,而不需要事先确定变量的大小和数量。

weixin_52201862的博客 2607

QML教程04 - Image:搞定界面上的所有图片

本文是QML教程系列的第四篇,重点讲解Image控件的实战用法。文章从图片显示常见的变形、卡顿等问题入手,详细介绍了Image的核心属性和使用技巧。主要内容包括:图片路径的三种写法(相对路径、qrc资源、网络URL)、最重要的fillMode属性解析(PreserveAspectFit、PreserveAspectCrop、Stretch的适用场景)、性能优化方法(sourceSize设置)、异步加载(asynchronous)以及圆形头像的实现方案。

BenBierBa的博客 1608

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

malloc与free

而就算是变长数组也只是说数组的大小可以使用变量来指定,而一旦数组创建好后,依然是不能调整大小malloc是用来申请内存的free是用来释放内存的。

2301_76445610的博客 4151

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[Google Guava] 8-区间

原文链接译文链接译文:沈义扬 范例 1 List scores; 2 Iterable belowMedian =Iterables.filter(scores,Range.lessThan(median)); 3 ... 4 Range validGrades = Range.closed(1, 12); ...

weixin_33671935的博客 201

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Guava中RangeMap自定义range区间

RangeMap是一种集合类型,它将不相交、且不为空的Range(key)映射给一个值(Value),RangeMap不可以将相邻的区间合并,即使这个区间映射的值是一样的,实现RangeMap也是一个接口,实现它的也只有两个类,分别为mmutableRangeMap和TreeRangeMap。其中TreeRangeMap是key有序的。具体区间排序规则就不再说了。

晓风残月xj 5059

[Java]-Guava工具库简介

文章目录字符串JointerSplitter拆分器工厂拆分器修饰符CharMatcher工厂方法操作方法Strings集合不可变集合新型集合MultisetMultimapRangeSet工具类ListsMapsuniqueIndexdifference扩展工具集ForwardingPreconditionsOrdering创建排序器链式调用使用缓存LoadingCacheCacheLoader缓存回收 Guava库中包含了一系列方便使用的工具库,如:集合 [collections] 、缓存 [cachin

飞鹰技术 3159

区间统计类guava中RangeSet使用以及注意

引入包:com.google.common.collect.RangeSet 主要方法有以下: 具体API进入code源码查询地址查看:http://grepcode.com/ 区间段的统计,例如视频观看统计等计算,离散统计 使用注意事项: 1、RangeSet 、Set 空构造方法没外部暴露,所以Serializable序列化不了,这样如果使用kafaka发消息等网络传输则

seapeak007的博客 1552

guava(四)区间Ranges

一、构建区间 (a..b) open(C, C) [a..b] closed(C, C) [a..b) closedOpen(C, C) (a..b] openClosed(C, C) (a..+∞) greaterThan(C) [a..+∞) atLeast(C) (-∞..b) lessThan(C) ...

weixin_30858241的博客 261

Guava(瓜娃)学习笔记

Guava(瓜娃)学习笔记 Guava工程包含了若干被google的java项目广泛依赖的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [commonannotations] 、字符串处理 [string processing] 、I/O

我是程序猿 4万+

Google Guava官方教程(中文版)

原文链接:http://ifeve.com/google-guava/引言Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [

JackChan 1万+

Google Guava与区间操作相关的类

文章目录1.示例2.介绍3.构建区间4.操作4.1查询操作4.2运算操作4.2.1`encloses`4.2.2`isConnected`4.2.3`intersection`4.2.4`span`5.离散域5.1你自己的离散域6.如果需要`Comparator`怎么办?7.示例代码 Ranges:Guava强大的API,用于处理连续和离散的可Comparable比较类型的区间。 1.示例 Lis...

Life is for sharing的博客 1090

Lambda 中取时间区间

Lambda表达式中如果出现日期进行比较,可以采用定义一个数组,数组内包含的是需要比较的日期Contains(包含)如:string[] datatime=new string[]{'2018-05-12','2018-06-12','2019-01-12'}; list&lt;Model&gt; list; list=_list.get(c=&gt; datatime.Contains(c.da...

IT界泥石流 5802

设定值范围+区间覆盖

区间选点+区间覆盖 区间选点问题(选择最少的点,使得每一个区间都至少有k个点) 将这些区间[l,r]先依照r从小到大排序,再依照l从大到小排序。选点尽量选择靠近右边界的点。然后依照这个排序后的区间进行遍历,用一个变量来存放遍历过程中上个区间的右边界,然后碰到一个新的区间的时候须要分两种情况讨论:1、这个区间和上个区间有相交的部分,那么就须要推断一下上次选择的点有多少在这...

weixin_34383618的博客 168
上一篇: Guava学习(九):字符串处理
下一篇: Guava学习系列
Blue Code
博客等级 码龄11年 3粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值