Guava官方文档中文版(九)-原生类型

原生类型

概览

Java的原生类型是基本类型:

  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • boolean

Guava查找方法之前,你应该看一下它是否是Arrays或者对应的JDK封装类型,例如Integer

这些类型不能当做对象使用或者当做泛型类型的类型参数,意味着许多多用途工具不能应用到他们。Guava提供了多个这些多用途工具,基于数组和集合API之间的接口,从类型到字节数组表示的转换,以及对某类型上的无符号行为的支持。

原生类型Guava工具(全部在com.google.common.primitives
byteBytes,SignedBytes,UnsignedBytes
shortShorts
intInts,UnsignedInteger,UnsignedInts
longLongs,UnsignedLong,UnsignedLongs
floatFloats
doubleDoubles
charChars
booleanBooleans

对于有符号和无符号字节在行为上不同的方法在Bytes中完全忽略,但是仅在SignedBytesUnsignedBytes工具中存在,因为字节的符号比其他类型的符号稍微有一些歧义。

intlong上的方法的无符号变体在UnsignedIntsUnsignedLongs类中提供,但是因为这些类型大多数用法都是有符号的,所以IntsLongs类将他们输入视为有符号。

除此之外,Guava提供无符号intlong值的包装类型:UnsignedIntegerUnsignedLong,来帮助你使用类型系统强制区分有符号值和无符号值,以换取小的性能代价。这些类直接支持以BigInteger的风格的简单的算术操作。

所有方法签名使用Wrapper来引用对应的JDK封装类型,并且prim来引用原生类型。(Prims,如果适用的话,引用对应的Guava实用工具类。)

原生数组工具

原生数组是以聚合方式处理原生类型最高效的方式(在内存和性能方面)。Guava提供大量工具来处理这些方法。

签名描述集合类似方法可用性
List<Wrapper> asList(prim... backingArray)封装一个原生数组作为对应封装类型的ListArrays.asList符号无关*
prim[] toArray(Collection<Wrapper> collection)复制一个集合到一个新的prim[]。这个方法和collection.toArray()一样,是线程安全的Collection.toArray()符号无关的
prim[] concat(prim[]... arrays)连接几个原生数组Iterables.concat符号无关的
boolean contains(prim[] array, prim target)确定指定的元素是否在指定的数组中Collection.contains符号无关的
int indexOf(prim[] array, prim target)发现在array中第一个出现值target的索引,如果没有这样的值存在则返回-1List.indexOf符号无关的
int lastIndexOf(prim[] array, prim target)发现在array中最后一个出现值target的索引,如果没有这样的值存在则返回-1List.lastIndexOf符号无关的
prim min(prim... array)返回数组中的最小元素Collections.min符号相关**
prim max(prim... array)返回数组中的最大元素Collections.max符号相关
String join(String separator, prim... array)构造一个包含array元素的字符串 ,以separator分隔Joiner.on(separator).join符号相关
Comparator<prim[]> lexicographicalComparator()以字典顺序比较原生数组的比较器Ordering.natural().lexicographical()符号相关

*符号无关方法存在于:Bytes,Shorts,Ints,Longs,Floats,Doubles,Chars,Booleans。不存在于UnsignedInts,UnsignedLongs,SignedBytesUnsignedBytes

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

通用工具方法

Guava提供了多个基础工具,这些工具并不是JDK6的一部分。但是,这里一些方法在JDK7是可用的。

签名描述可用性
int compare(prim a, prim b)一个传统的Comparator.compare方法,但是关于私有类型。从JDK7开始在JDK封装类提供签名有关
prim checkedCast(long value)转换指定的值为prim,除非指定的值不适合prim,此情况将抛出IllegalArgumentException仅对整型类型签名相关*
prim saturatedCast(long value)转换指定的值为prim,除非指定的值不适合prim,此情况使用最接近的prim

*这里整型类型包含tyte,short,int,long。整型类型不包含char,boolean,floatdouble

注意:从double凑整(Rounding)在com.google.common.math.DoubleMath提供,并且支持大量凑整模式。详情请查看此章节

字节转换方法

Guava提供将原生类型转换为以大端排序字节数组表示的方法。所有方法是符号无关的,除了Booleans没有提供这些方法。

签名描述
int BYTES常量,表示代表一个prim值需要的字节数量
prim fromByteArray(byte[] bytes)返回在数组bytes中大端表示法前Prims.BYTES字节的prim值。如果bytes.length <= Prims.BYTES抛出IllegalArgumentException
prim fromBytes(byte b1, ..., byte bk)使用Prims.BYTES字节参数。按照大端序返回其字节表示是指定的字节的prim
byte[] toByteArray(prim value)返回一个数组,包含value大端序字节表示

无符号的支持

UnsignedIntsUnsignedLongs工具类提供了Java在其包装类中为带符号类型提供的一些通用工具。UnsignedIntsUnsignedLongs直接处理原生类型:你需要确保无符号值传入这些工具。

除此之外,对于intlong,Guava提供“无符号”封装类型:UnsignedIntegerUnsignedLong,用来帮助你在类型系统中强制区分无符号和带符号的值,以换取小的性能损失。

通用工具

这些方法的带符号类似方法在JDK中的封装类中提供。

签名说明
int UnsignedInts.parseUnsignedInt(String) long UnsignedLongs.parseUnsignedLong(String)按照10进制将字符串转为无符号值
int UnsignedInts.parseUnsignedInt(String string, int radix) long UnsignedLongs.parseUnsignedLong(String string, int radix)以指定的进制将字符串转换为无符号值
String UnsignedInts.toString(int) String UnsignedLongs.toString(long)以10进制返回无符号值的字符串表示
String UnsignedInts.toString(int value, int radix) String UnsignedLongs.toString(long value, int radix)以指定的进制返回无符号值的字符串表示
封装器

提供的无符号封装器类型包含多个方法,使他们的使用和转换更容易。

签名说明
UnsignedPrim plus(UnsignedPrim),minus,times,dividedBy,mod简单的运算操作
UnsignedPrim valueOf(BigInteger)返回一个将BigInteger当做UnsignedPrim的值,如果指定的BigInteger是负数或者不符合则抛出IAE
UnsignedPrim valueOf(long)返回将long当做UnsignedPrim的值,如果指定的long是负数或者不合适,则抛出IAE
UnsignedPrim fromPrimBits(prim value)将给定的值以无符号展示。例如,UnsignedInteger.fromIntBits(1 << 31)有值232 ,尽管1 << 31作为int是负数。
BigInteger bigIntegerValue()得到UnsignedPrim作为BigInteger的值
toString(),toString(int radix)返回无符号值的字符串表示
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值