Kotlin数据容器(2)✔️基本数据类型数组

2019-06-12  本文已影响0人  狼性代码人
  • 基本数据类型数组
  • 3种基本数据类型数组的创建方法

一、基本数据类型数组

  kotlin 编译器将元素是基本类型的 kotlin 对象数组编译成 Java 中的包装类数组,而 Java 中的包装类数组与 Java 中的基本数据类型数组相比,包装类数组数据存储空间占用较大,运算效率差。因此,kotlin 中提供了8种基本数据类型数组,分别对应 Java 中的8种基本数据类型数组。例如:kotlin 中的 IntArray 被编译为 Java 中的 int[]数组。

  下面是 Kotlin 中8种数据类型数组,与编译后的 Java 代码比较。

// kotlin 8种基本数据类型数组

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 通过转换编译后的 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中基本数据类型数组与 Java 中基本数据类型数组的对应关系

Kotlin 基本数据类型数组 Java 中基本数据类型数组
ByteArray byte[]
ShortArray short[]
IntArray int[]
LongArray long[]
FloatArray float[]
DoubleArray double[]
CharArray char[]
BooleanArray boolean[]

二、3种基本数据类型数组的创建方法

每一种基本数据类型数组的创建都有3中方式,一下是以 Int 类型为例:

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表达式
    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]
上一篇 下一篇

猜你喜欢

热点阅读