関数名 | 生成されたインスタンス | メソッドシグネチャ | |
---|---|---|---|
arrayListOf | ArrayList | fun |
|
arrayOf | パラメータに渡された型の配列 | immutable | |
hashMapOf | HashMap | fun <K, V> hashMapOf(vararg pairs: Pair<K, V>): HashMap<K, V> | |
hashSetOf | HashSet | fun |
|
linkedMapOf | LinkedHashMap | fun <K, V> linkedMapOf(vararg pairs: Pair<K, V> ): LinkedHashMap<K, V> | 順序が維持される |
linkedSetOf | LinkedHashSet | fun |
順序が維持される |
listOf | Arrays | immutable | |
mapOf | LinkedHashMap | fun <K, V> mapOf(vararg pairs: Pair<K, V>): Map<K, V> | immutable 順序が維持される |
mutableListOf | ArrayList | fun |
|
mutableMapOf | LinkedHashMap | fun <K, V> mutableMapOf(vararg pairs: Pair<K, V> ): MutableMap<K, V> | 順序が維持される |
mutableSetOf | LinkedHashSet | fun |
順序が維持される |
setOf | LinkedHashSet | fun |
immutable 順序が維持される |
sortedMapOf | TreeMap | fun <K : Comparable |
初期化値がソートして格納される |
sortedSetOf | TreeSet | fun |
初期化値がソートして格納される |
ByteArray, ShortArray, IntArray, LongArray, FloatArray, DoubleArray, BooleanArary, CharArray
Javaで配列を引数とするメソッドを呼び出す場合、Kotlin側で配列を作成する必要がある
(例) Java の場合
char[] buf = new char[64];
int len;
while(( len = reader.read( buf, 0, buf.length )) >= 0 ) {
// 処理
}
Kotlin の場合
val buf = CharArray( 64 )
var len = reader.read( buf, 0, buf.size )
while( len >= 0 ) {
// 処理
len = reader.read( buf, 0, buf.size )
}
val iar = IntArray(5)
val iar = intArrayOf( 1, 2, 3, 4, 5 )
他にも shortArrayOf, byteArrayOf などプリミティブ型の配列を生成するファンクションが用意されているval stringArray: Array<String?> = arrayOfNulls( 5 )
val stringArray: = Array( 5, { idx -> (idx + idx).toString() })
[ “0”, “2”, “4”, “8” ]
val stringArray = arrayOf( "その1", "その2", "その3", "その4", "その5" )
stringArray[0] = "No.1"
3通りの方法で int 配列を作成し、jad でどのような Javaソースが生成されているかを確認
Array
(kotlin)
val intArray = Array<Int>( 3, { idx -> idx + 1 } )
(java)
Integer intArray[] = new Integer[3];
// 以下代入式
IntArray
(kotlin)
val intArray = IntArray( 3, { idx -> idx + 1 } )
(java)
int intArray[] = new int[3];
// 以下代入式
arrayOf
(kotlin)
val intArray = arrayOf( 1, 2, 3 )
(java)
Integer intArray[] { Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3) };
intArrayOf
(kotlin)
val intArray = intArrayOf( 1, 2, 3 )
(java)
int intArray[] { 1, 2, 3 };
IntArray と intArrayOf は int配列(プリミティブ)となり、以外は Integer配列(オブジェクト)となった。
val list = listOf( 1, 2, 3 )
list.add( 4 ) // エラー
val list = arrayOf( 1, 2, 3 )
list.add( 4 ) // もちろんエラー
val list = arrayListOf( 1, 2, 3 )
list.add( 4 ) // true( 4個目の要素が追加される)
val list: MutableList<Int> = arrayListOf()
val map = mutableMapOf<Int,Int>(Pair(1,2),Pair(3,4))
val map = mutableMapOf<Int,Int>(1 to 2, 3 to 4)
map.put( 5, 6 ) // null(3個目のペアが追加される)
val map: MutableMap<String,String> = mutableMapOf()
val list = java.util.LinkedList<String>()
list.add( "Hello" ) // true
listOf( 1, 2, 3, 4, 5 ).reduce{ s, ii -> s + ii }
1回目は s=1, ii=2(1個目と2個目の値), 2回目は s=3, ii=3(前回の合計値と 3個目の値)が渡される。
listOf( 1, 2, 3, 4, 5 ).fold( 0, { s, ii -> s + ii } )
s の初期値に 0 を渡す。
1回目は s=0, ii=1(初期値と1個目の値), 2回目は s=1, ii=2(前回の合計値と 2個目の値)が渡される。
val map = mapOf(1 to "A", 2 to "B", 3 to "C")
map.forEach {
println( "${it.key} = ${it.value}" )
}
val map = mapOf(1 to "A", 2 to "B", 3 to "C")
map.forEach { (k, v) ->
println( "${k} = ${v}" )
}
Sequence に続くコレクション関数によっては 1件ずつ処理させる
(サンプル)
listOf( 1,2,3 ).filter {
println( "filter: ${it}" )
it % 2 == 0
}.forEach {
println( "forEach: ${it}" )
}
これをコンパイルして実行すると、次のように filter 処理が終わってから forEach が実行される
filter: 1
filter: 2
filter: 3
forEach: 2
これを次のように asSequence を追加すると
listOf( 1,2,3 ).asSequence().filter {
println( "filter: ${it}" )
it % 2 == 0
}.forEach {
println( "forEach: ${it}" )
}
filter 処理と連動して forEach が実行される
filter: 1
filter: 2
forEach: 2
filter: 3
※asSequence() の後続のコレクション関数が sortedBy のように逐次処理できない場合は、sortedBy の処理が終わってから次の関数が実行される
fun main( args: Array<String> ) {
// hasNext(), next() でまわす
val list = arrayListOf( 1, 2, 3, 4, 5 )
val ite = list.iterator()
while( ite.hasNext()) {
val ii = ite.next()
if( ii % 2 == 1 ) {
ite.remove()
}
}
println( list )
// for でまわす
val list2 = arrayListOf( 1, 2, 3, 4, 5 )
val ite2 = list2.iterator()
for( ii in ite2 ) {
if( ii % 2 == 0 ) {
ite2.remove()
}
}
println( list2 )
}