com.google.common.primitives:八种原始类型和无符号类型的静态工具包

 //在java8中可以被Integer.BYTES替代,代表字节数bytespublic static final int BYTES = Integer.SIZE / Byte.SIZE;//int最大存储值,使用 1<<(Integer.SIZE-2) 计算得到,2是因为一位代表正负,1同时占一位public static final int MAX_POWER_OF_TWO = 1 << (Integer.SIZE - 2);
public static int hashCode(int value) {//int类型的hashcode是其本身return value;}
    public static int indexOf(int[] array, int[] target) {//这里进行了入参校验 可能是因为两个入参 如果报空指针则不知道是哪个参数引起的checkNotNull(array, "array");checkNotNull(target, "target");if (target.length == 0) {return 0;}//...}public static int indexOf(int[] array, int target) {return indexOf(array, target, 0, array.length);}//这两个方法都没有进行入参校验 可能因为入参格式不同 可以清楚的知道是哪个参数的问题private static int indexOf(int[] array, int target, int start, int end) {for (int i = start; i < end; i++) {if (array[i] == target) {return i;}}return -1;}
public static byte[] toByteArray(int value) {return new byte[] {//将Int数据按照大端拆成4个字节的数组(byte) (value >> 24), (byte) (value >> 16), (byte) (value >> 8), (byte) value};
}
public static int fromByteArray(byte[] bytes) {//int类型4字节 如果不够4字节不能转成intcheckArgument(bytes.length >= BYTES, "array too small: %s < %s", bytes.length, BYTES);return fromBytes(bytes[0], bytes[1], bytes[2], bytes[3]);
}
public static int fromBytes(byte b1, byte b2, byte b3, byte b4) {//使用大端拼接,每一个&0xff是为了清除额外数据(特殊情况),保证数据的正确。再使用 | 拼接。return b1 << 24 | (b2 & 0xFF) << 16 | (b3 & 0xFF) << 8 | (b4 & 0xFF);
}
public static String join(String separator, int... array) {checkNotNull(separator);if (array.length == 0) {return "";}// 相对于预先确定StringBuilder的准确大小而言,只需获得正确的数量级就可以了 (Guava注释)// 原因是:int数组转换成String的时候位数不能直接对数组进行.length()// 需要遍历数组中的每一个元素,并计算其中数字的长度,时间复杂度比较高.所以大概估计一个5倍的长度.StringBuilder builder = new StringBuilder(array.length * 5);builder.append(array[0]);for (int i = 1; i < array.length; i++) {builder.append(separator).append(array[i]);}return builder.toString();
}
public static List<Integer> asList(int... backingArray) {if (backingArray.length == 0) {return Collections.emptyList();}return new IntArrayAsList(backingArray);
}//主要关注IntArrayAsList
private static class IntArrayAsList extends AbstractList<Integer>implements RandomAccess, Serializable {final int[] array;final int start;final int end;IntArrayAsList(int[] array) {this(array, 0, array.length);}//通过其构造方法发现其是一个视图类,并没有进行数据的拷贝,而仅仅是做了一个包装IntArrayAsList(int[] array, int start, int end) {this.array = array;this.start = start;this.end = end;}
}
//数组间比较器 比较条件:将数组元素anindex一一对应比较,直到某个index的元素按字典序较大即为对应数组较大,如果两数组前缀相同则比较长度
public static Comparator<int[]> lexicographicalComparator() {return LexicographicalComparator.INSTANCE;
}private enum LexicographicalComparator implements Comparator<int[]> {//使用枚举类实现单例,调用LexicographicalComparator.INSTANCE就可以进行访问。//相比较于返回new对象,更快。相比全局变量,不影响全局空间。INSTANCE;@Overridepublic int compare(int[] left, int[] right) {int minLength = Math.min(left.length, right.length);for (int i = 0; i < minLength; i++) {int result = Ints.compare(left[i], right[i]);if (result != 0) {return result;}}return left.length - right.length;}@Overridepublic String toString() {return "Ints.lexicographicalComparator()";}
}

Guava源码阅读计划:primitives.Ints相关推荐

  1. 【源码阅读计划】浅析 Java 线程池工作原理及核心源码

    [源码阅读计划]浅析 Java 线程池工作原理及核心源码 为什么要用线程池? 线程池的设计 线程池如何维护自身状态? 线程池如何管理任务? execute函数执行过程(分配) getTask 函数(获 ...

  2. Android Framework源码阅读计划(2)——LocationManagerService.java

    Android Framework源码阅读计划 Android Framework源码阅读计划(1)--LocationManager.java Android Framework源码阅读计划(2)- ...

  3. 淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划

    淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划 SQL编译解析三部曲分为:构建语法树,制定逻辑计划,生成物理执行计划.前两个步骤请参见我的博客<<淘宝数据库O ...

  4. TiDB 源码阅读系列文章(六)Select 语句概览

    在先前的 TiDB 源码阅读系列文章(四) 中,我们介绍了 Insert 语句,想必大家已经了解了 TiDB 是如何写入数据,本篇文章介绍一下 Select 语句是如何执行.相比 Insert,Sel ...

  5. 【Flink】Flink 源码阅读笔记(15)- Flink SQL 整体执行框架

    1.概述 转载:Flink 源码阅读笔记(15)- Flink SQL 整体执行框架 在数据处理领域,无论是实时数据处理还是离线数据处理,使用 SQL 简化开发将会是未来的整体发展趋势.尽管 SQL ...

  6. WSL下源码阅读工具LXR(Linux Cross-Referencer)的配置

    题外话:不知道是不是太久没有配置/部署软件的原因,上手配置LXR给我的体感比较不好,因此写下此博客记录该工具配置的过程 项目官网:zh/LXR 项目 参考教程1:史上最详细的LXR安装介绍_mosen ...

  7. 【vn.py学习笔记(八)】vn.py utility、BarGenerator、ArrayManager源码阅读

    [vn.py学习笔记(八)]vn.py utility.BarGenerator.ArrayManager源码阅读 写在前面 1 工具函数 2 BarGenerator 2.1 update_tick ...

  8. 《源码阅读》专栏系列开篇 - 当Java工程师的这几年

    <源码阅读>专栏系列开篇 - 当Java工程师的这几年 2020年了,受疫情影响,开始在家坐起了"月子".利用这段时间梳理下自己的职业生涯规划. 职业生涯回顾 2013 ...

  9. TiDB 源码阅读系列文章(六)Select 语句概览 1

    在先前的 TiDB 源码阅读系列文章(四) 中,我们介绍了 Insert 语句,想必大家已经了解了 TiDB 是如何写入数据,本篇文章介绍一下 Select 语句是如何执行.相比 Insert,Sel ...

最新文章

  1. centos使用镜像源轻松配置golang+vscode的方法
  2. Jmeter之完整的HTTP接口测试
  3. linux运维基础2
  4. BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
  5. Boost:Boost概念的function_requires()的测试程序
  6. 双向链表简单实现及图示
  7. linux内核启动后门,Linux内核模块入门之简单内核后门
  8. 【渝粤教育】广东开放大学 劳动人事争议处理法 形成性考核 (51)
  9. 基于单片机超声波测距系统的设计_一种基于UWB技术实现的测距防撞系统
  10. python如何把一张图像的所有像素点的值都显示出来_情人节,教你用 Python 向女神表白...
  11. 天津市全国计算机等级报名时间,天津市2018年全国计算机等级考试报名时间及地点...
  12. python输出变量地址_Python——变量
  13. golang 中io包用法(一)
  14. 如何查看Windows8.1计算机体验指数评分
  15. Java SE 007 流程控制语句 续
  16. Typora自动上传图片
  17. 泰拉瑞亚服务器云存档文件夹,泰拉瑞亚服务器云存档文件
  18. HHKB-BT 入门指北
  19. 一、微信小程序拼团项目简介
  20. 服务器性能之IO性能指标含义

热门文章

  1. 拉格朗日中值定理证明不等式
  2. 皮肤范围检测matlab思路,一种基于S21相位的无创血糖浓度检测方法与流程
  3. 圆台下料展开计算方法_怎么画 圆锥台展开图
  4. SublimeText PackageControll emmet 安装
  5. 使用BND工具把普通JAR变成OSGI插件
  6. Comsolnbsp;Multiphysicsnbsp;声场仿真模块…
  7. 谷歌浏览器正在等待可用的套接字
  8. JS Date比较时间的先后 - Kaiqisan
  9. redhat6.5安装10201解决办法
  10. MotionNet: 基于鸟瞰图的自主驾驶联合感知与运动预测