- 基本數(shù)據(jù)類(lèi)型數(shù)組
- 3種基本數(shù)據(jù)類(lèi)型數(shù)組的創(chuàng)建方法
一镇辉、基本數(shù)據(jù)類(lèi)型數(shù)組
??kotlin 編譯器將元素是基本類(lèi)型的 kotlin 對(duì)象數(shù)組編譯成 Java 中的包裝類(lèi)數(shù)組,而 Java 中的包裝類(lèi)數(shù)組與 Java 中的基本數(shù)據(jù)類(lèi)型數(shù)組相比,包裝類(lèi)數(shù)組數(shù)據(jù)存儲(chǔ)空間占用較大,運(yùn)算效率差。因此,kotlin 中提供了8種基本數(shù)據(jù)類(lèi)型數(shù)組钻蹬,分別對(duì)應(yīng) Java 中的8種基本數(shù)據(jù)類(lèi)型數(shù)組。例如:kotlin 中的 IntArray 被編譯為 Java 中的 int[]數(shù)組凭需。
??下面是 Kotlin 中8種數(shù)據(jù)類(lèi)型數(shù)組问欠,與編譯后的 Java 代碼比較。
// kotlin 8種基本數(shù)據(jù)類(lèi)型數(shù)組
fun main(args: Array<String>?) {
val ints: IntArray = intArrayOf(1)
val shorts: ShortArray = ShortArray(1)
val btyes: ByteArray = byteArrayOf(3)
val longs: LongArray = LongArray(4) { (it * it).toLong() }
val floats: FloatArray = floatArrayOf(23.2f)
val doubles: DoubleArray = doubleArrayOf(3.3)
val chars: CharArray = charArrayOf('a')
val booleans: BooleanArray = booleanArrayOf(false)
}
// kotlin 通過(guò)轉(zhuǎn)換編譯后的 java 代碼
@Metadata(
mv = {1, 1, 15},
bv = {1, 0, 3},
k = 2,
d1 = {"\u0000\u0014\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u0011\n\u0002\u0010\u000e\n\u0002\b\u0006\u001a\u001b\u0010\u0000\u001a\u00020\u00012\u000e\u0010\u0002\u001a\n\u0012\u0004\u0012\u00020\u0004\u0018\u00010\u0003¢\u0006\u0002\u0010\u0005\u001a\u001f\u0010\u0006\u001a\u00020\u0001\"\u0004\b\u0000\u0010\u00072\f\u0010\b\u001a\b\u0012\u0004\u0012\u0002H\u00070\u0003¢\u0006\u0002\u0010\t¨\u0006\n"},
d2 = {"main", "", "args", "", "", "([Ljava/lang/String;)V", "printArray", "T", "array", "([Ljava/lang/Object;)V", "kotlin_module"}
)
public final class WwwwKt {
public static final void printArray(@NotNull Object[] array) {
Intrinsics.checkParameterIsNotNull(array, "array");
boolean var3 = false;
String printStr = array.length == 0 ? "[]" : ArraysKt.joinToString$default(array, (CharSequence)", ", (CharSequence)"[", (CharSequence)"]", 0, (CharSequence)null, (Function1)null, 56, (Object)null);
boolean var2 = false;
System.out.println(printStr);
}
public static final void main(@Nullable String[] args) {
int[] var10000 = new int[]{1};
short[] shorts = new short[1];
byte[] var16 = new byte[]{3};
int size$iv = 4;
int $i$f$LongArray = false;
long[] result$iv = new long[size$iv];
int i$iv = 0;
for(int var9 = result$iv.length; i$iv < var9; ++i$iv) {
int var11 = false;
long var14 = (long)(i$iv * i$iv);
result$iv[i$iv] = var14;
}
float[] var17 = new float[]{23.2F};
double[] var18 = new double[]{3.3D};
char[] var19 = new char[]{'a'};
boolean[] var20 = new boolean[]{false};
}
}
??kotlin 中8中基本數(shù)據(jù)類(lèi)型數(shù)組與 Java 中基本數(shù)據(jù)類(lèi)型數(shù)組的對(duì)應(yīng)關(guān)系
Kotlin 基本數(shù)據(jù)類(lèi)型數(shù)組 | Java 中基本數(shù)據(jù)類(lèi)型數(shù)組 |
---|---|
ByteArray | byte[] |
ShortArray | short[] |
IntArray | int[] |
LongArray | long[] |
FloatArray | float[] |
DoubleArray | double[] |
CharArray | char[] |
BooleanArray | boolean[] |
二粒蜈、3種基本數(shù)據(jù)類(lèi)型數(shù)組的創(chuàng)建方法
每一種基本數(shù)據(jù)類(lèi)型數(shù)組的創(chuàng)建都有3中方式顺献,一下是以 Int 類(lèi)型為例:
intArrayOf(vararg elements: Int) 工廠函數(shù):指定數(shù)組元素列表,創(chuàng)建元素類(lèi)型為 Int 的數(shù)組枯怖,vararg 表明參數(shù)個(gè)數(shù)是可變的注整。
IntArray(size: Int) 構(gòu)造函數(shù):size 參數(shù)指定數(shù)組大小,創(chuàng)建元素為 Int 的數(shù)組度硝,數(shù)組中的元素為該類(lèi)型默認(rèn)值肿轨,Int 的默認(rèn)值為0。
IntArray(size: Int, init: (Int) -> Int) 構(gòu)造函數(shù):通過(guò) size 參數(shù)指定數(shù)組大小蕊程,init 參數(shù)指定一個(gè)用于初始化元素的函數(shù)椒袍,實(shí)際使用時(shí)經(jīng)常是 Lambda 表達(dá)式,索引值從0開(kāi)始藻茂。
fun <T> printArray(iterator: Iterator<T>) {
val builder = StringBuilder("[")
var first = true
while (iterator.hasNext()) {
if (!first) builder.append(", ")
builder.append(iterator.next())
first = false
}
builder.append("]")
println(builder.toString())
}
fun main(args: Array<String>?) {
val array1 = intArrayOf(1, 2, 4, 5, 6)
val array2 = CharArray(3)
array2[0] = 'a'
array2[1] = 'b'
array2[2] = 'c'
val array3 = IntArray(5) { it * it } // 尾隨lambda表達(dá)式
val array4 = BooleanArray(0)
val array5 = IntArray(3)
printArray(array1.iterator())
printArray(array2.iterator())
printArray(array3.iterator())
printArray(array4.iterator())
printArray(array5.iterator())
}
2019-06-12 11:28:51.035 7129-7129/cn.ak.kot I/System.out: [1, 2, 4, 5, 6]
2019-06-12 11:28:51.035 7129-7129/cn.ak.kot I/System.out: [a, b, c]
2019-06-12 11:28:51.035 7129-7129/cn.ak.kot I/System.out: [0, 1, 4, 9, 16]
2019-06-12 11:28:51.036 7129-7129/cn.ak.kot I/System.out: []
2019-06-12 11:28:51.037 7129-7129/cn.ak.kot I/System.out: [0, 0, 0]