原文链接 译文链接 译者:沈义扬,校对:丁一

概述

Java的原生类型就是指基本类型:byte、short、int、long、float、double、char和boolean。

在从Guava查找原生类型方法之前,可以先查查Arrays类,或者对应的基础类型包装类,如Integer

原生类型不能当作对象或泛型的类型参数使用,这意味着许多通用方法都不能应用于它们。Guava提供了若干通用工具,包括原生类型数组与集合API的交互,原生类型和字节数组的相互转换,以及对某些原生类型的无符号形式的支持。

原生类型 Guava工具类(都在com.google.common.primitives
byte BytesSignedBytesUnsignedBytes
short Shorts
int IntsUnsignedIntegerUnsignedInts
long LongsUnsignedLongUnsignedLongs
float Floats
double Doubles
char Chars
boolean Booleans

Bytes工具类没有定义任何区分有符号和无符号字节的方法,而是把它们都放到了SignedBytes和UnsignedBytes工具类中,因为字节类型的符号性比起其它类型要略微含糊一些。

int和long的无符号形式方法在UnsignedInts和UnsignedLongs类中,但由于这两个类型的大多数用法都是有符号的,Ints和Longs类按照有符号形式处理方法的输入参数。

此外,Guava为int和long的无符号形式提供了包装类,即UnsignedInteger和UnsignedLong,以帮助你使用类型系统,以极小的性能消耗对有符号和无符号值进行强制转换。

在本章下面描述的方法签名中,我们用Wrapper表示JDK包装类,prim表示原生类型。(Prims表示相应的Guava工具类。)

原生类型数组工具

原生类型数组是处理原生类型集合的最有效方式(从内存和性能双方面考虑)。Guava为此提供了许多工具方法。

方法签名 描述 类似方法 可用性
List<Wrapper> asList(prim… backingArray) 把数组转为相应包装类的List Arrays.asList 符号无关*
prim[] toArray(Collection<Wrapper> collection) 把集合拷贝为数组,和collection.toArray()一样线程安全 Collection.toArray() 符号无关
prim[] concat(prim[]… arrays) 串联多个原生类型数组 Iterables.concat 符号无关
boolean contains(prim[] array, prim target) 判断原生类型数组是否包含给定值 Collection.contains 符号无关
int indexOf(prim[] array, prim target) 给定值在数组中首次出现处的索引,若不包含此值返回-1 List.indexOf 符号无关
int lastIndexOf(prim[] array, prim target) 给定值在数组最后出现的索引,若不包含此值返回-1 List.lastIndexOf 符号无关
prim min(prim… array) 数组中最小的值 Collections.min 符号相关*
prim max(prim… array) 数组中最大的值 Collections.max 符号相关
String join(String separator, prim… array) 把数组用给定分隔符连接为字符串 Joiner.on(separator).join 符号相关
Comparator<prim[]>   lexicographicalComparator() 按字典序比较原生类型数组的Comparator Ordering.natural().lexicographical() 符号相关

*符号无关方法存在于Bytes, Shorts, Ints, Longs, Floats, Doubles, Chars, Booleans。而UnsignedInts, UnsignedLongs, SignedBytes, 或UnsignedBytes不存在。

*符号相关方法存在于SignedBytes, UnsignedBytes, Shorts, Ints, Longs, Floats, Doubles, Chars, Booleans, UnsignedInts, UnsignedLongs。而Bytes不存在。

通用工具方法

Guava为原生类型提供了若干JDK6没有的工具方法。但请注意,其中某些方法已经存在于JDK7中。

方法签名 描述 可用性
int compare(prim a, prim b) 传统的Comparator.compare方法,但针对原生类型。JDK7的原生类型包装类也提供这样的方法 符号相关
prim checkedCast(long value) 把给定long值转为某一原生类型,若给定值不符合该原生类型,则抛出IllegalArgumentException 仅适用于符号相关的整型*
prim saturatedCast(long value) 把给定long值转为某一原生类型,若给定值不符合则使用最接近的原生类型值 仅适用于符号相关的整型

*这里的整型包括byte, short, int, long。不包括char, boolean, float, 或double。

**译者注:不符合主要是指long值超出prim类型的范围,比如过大的long超出int范围。

注:com.google.common.math.DoubleMath提供了舍入double的方法,支持多种舍入模式。相见第12章的”浮点数运算”。

字节转换方法

Guava提供了若干方法,用来把原生类型按大字节序与字节数组相互转换。所有这些方法都是符号无关的,此外Booleans没有提供任何下面的方法。

方法或字段签名 描述
int BYTES 常量:表示该原生类型需要的字节数
prim fromByteArray(byte[] bytes) 使用字节数组的前Prims.BYTES个字节,按大字节序返回原生类型值;如果bytes.length <= Prims.BYTES,抛出IAE
prim fromBytes(byte b1, …, byte bk) 接受Prims.BYTES个字节参数,按大字节序返回原生类型值
byte[] toByteArray(prim value) 大字节序返回value的字节数组

无符号支持

JDK原生类型包装类提供了针对有符号类型的方法,而UnsignedInts和UnsignedLongs工具类提供了相应的无符号通用方法。UnsignedInts和UnsignedLongs直接处理原生类型:使用时,由你自己保证只传入了无符号类型的值。

此外,对int和long,Guava提供了无符号包装类(UnsignedIntegerUnsignedLong),来帮助你以极小的性能消耗,对有符号和无符号类型进行强制转换。

无符号通用工具方法

JDK的原生类型包装类提供了有符号形式的类似方法。

方法签名 说明
int UnsignedInts.parseUnsignedInt(String)long UnsignedLongs.parseUnsignedLong(String) 按无符号十进制解析字符串
int UnsignedInts.parseUnsignedInt(String string, int radix)long UnsignedLongs.parseUnsignedLong(String string, int radix) 按无符号的特定进制解析字符串
String UnsignedInts.toString(int)String UnsignedLongs.toString(long) 数字按无符号十进制转为字符串
String UnsignedInts.toString(int   value, int radix)String UnsignedLongs.toString(long value, int radix) 数字按无符号特定进制转为字符串

无符号包装类

无符号包装类包含了若干方法,让使用和转换更容易。

方法签名 说明
UnsignedPrim add(UnsignedPrim), subtract, multiply, divide, remainder 简单算术运算
UnsignedPrim valueOf(BigInteger) 按给定BigInteger返回无符号对象,若BigInteger为负或不匹配,抛出IAE
UnsignedPrim valueOf(long) 按给定long返回无符号对象,若long为负或不匹配,抛出IAE
UnsignedPrim asUnsigned(prim value) 把给定的值当作无符号类型。例如,UnsignedInteger.asUnsigned(1<<31)的值为231,尽管1<<31当作int时是负的
BigInteger bigIntegerValue() 用BigInteger返回该无符号对象的值
toString(),  toString(int radix) 返回无符号值的字符串表示

译者注:UnsignedPrim指各种无符号包装类,如UnsignedInteger、UnsignedLong

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: [Google Guava] 7-原生类型

[Google Guava] 7-原生类型的更多相关文章

  1. Google Guava官方教程(中文版)

    Google Guava官方教程(中文版) 原文链接  译文链接 译者: 沈义扬,罗立树,何一昕,武祖  校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库, ...

  2. [转载]Google Guava官方教程(中文版)

      原文链接  译文链接 译者: 沈义扬,罗立树,何一昕,武祖  校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] ...

  3. Guava学习笔记:Google Guava 类库简介

    http://www.cnblogs.com/peida/tag/Guava/ Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, cachin ...

  4. Google Guava之--cache

    一.简介 Google Guava包含了Google的Java项目许多依赖的库,如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support ...

  5. com.google.guava 包解析 ——Google Guava官方教程(中文版)

    全网址           http://ifeve.com/google-guava/ 竹子博客:  http://www.cnblogs.com/peida/archive/2013/06/08/ ...

  6. 初探Google Guava

    Guava地址:https://github.com/google/guava 第一次接触我是在16年春github上,当时在找单机查缓存方法,google guava当初取名是因为JAVA的类库不好 ...

  7. Google Guava新手教程

         以下资料整理自网络 一.Google Guava入门介绍 引言 Guavaproject包括了若干被Google的 Java项目广泛依赖 的核心库,比如:集合 [collections] . ...

  8. Google Guava 类库简介

    Guava 是一个 Google开发的 基于java的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency librar ...

  9. 开源介绍:Google Guava、Google Guice、Joda-Time

    一.Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency lib ...

随机推荐

  1. javaIO -- File源码

    一.简介 文件和目录路径名的抽象表示. 用户界面和操作系统使用依赖于系统的路径名字符串命名文件和目录. 这个类提供了一个抽象的,独立于系统的层次化路径名的视图. 二.代码 (一).属性详情 //平台的 ...

  2. [NOIP普及组2011]装箱问题

    目录 链接 博客链接 题目链接 题目内容 题目描述 格式 输入 输出 样例 输入 输出 前缀知识 题解 题目名称:装箱问题 来源:2011年NOIP普及组 链接 博客链接 CSDN 洛谷博客 题目链接 ...

  3. python对影评进行评论分析,形成词云图

    1 # -*- coding:utf-8 -*-   2 '''   3 抓取豆瓣电影某部电影的评论  4抓取电影   5 网址链接:https://movie.douban.com/subject/ ...

  4. Linux十大顶级发行版本

    当前顶级发行版概览   对于Linux新手来说,在各发行版之间困惑得进行选择和不断增加的数量实在令人头晕.这就是写作本文的原因,其中列出的10个(附加一个值得一提的FreeBSD,BSD一族中最为流行 ...

  5. nginx 设置开机启动

    设置nginx开机启动chkconfig --add /etc/init.d/nginx chkconfig nginx on

  6. 使用Duilib开发Windows软件(1)——HelloWorld

    我使用的是网易版本: https://github.com/netease-im/NIM_Duilib_Framework 时间是2019-11-28,作者最新的提交如下图: 运行官方示例程序 下载完 ...

  7. ASP.NET Core 入门(1)(搭建环境CentOS)

    一.CentOS 7 安装 下载CentOS http://isoredirect.centos.org/centos/7/isos/x86_64/  选择其中下载即可. 下载完成后打开vmware准 ...

  8. aspnet core 全局模型验证,统一api响应

    上手就来 新建一个模型验证过滤器,其中ApiResp是自定义的统一响应类. public class VldFilter:IActionFilter { /// <summary> /// ...

  9. c#基础知识梳理(二)

    上期回顾 - https://www.cnblogs.com/liu-jinxin/p/10818256.html 一.变量 一个变量只不过是一个供程序操作的存储区的名字.在 C# 中,每个变量都有一 ...

  10. jQuery入门简述

    jQuery 是一套快速的,简洁的 javaScript 脚本库,jQuery 由美国人 John Resig 创建,至今已吸引了来自世界各地的众多 javaScript 高手加入其组织,使用户能更方 ...