日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Google Guava] 7-原生类型

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Google Guava] 7-原生类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接?譯文鏈接?譯者:沈義揚,校對:丁一

概述

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

在從Guava查找原生類型方法之前,可以先查查Arrays類,或者對應的基礎類型包裝類,如Integer

原生類型不能當作對象或泛型的類型參數使用,這意味著許多通用方法都不能應用于它們。Guava提供了若干通用工具,包括原生類型數組與集合API的交互,原生類型和字節數組的相互轉換,以及對某些原生類型的無符號形式的支持。

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

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)把數組轉為相應包裝類的ListArrays.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)給定值在數組中首次出現處的索引,若不包含此值返回-1List.indexOf符號無關
int?lastIndexOf(prim[] array, prim target)給定值在數組最后出現的索引,若不包含此值返回-1List.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()按字典序比較原生類型數組的ComparatorOrdering.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提供了無符號包裝類(UnsignedInteger和UnsignedLong),來幫助你以極小的性能消耗,對有符號和無符號類型進行強制轉換。

無符號通用工具方法

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-原生類型

from:?http://ifeve.com/google-guava-primitives/

總結

以上是生活随笔為你收集整理的[Google Guava] 7-原生类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。