静态编程语言集合有三种类型List
、Set
和Map
。这些集合是可变和不可变的。映射是Hashmap,它是键值对。
以下是Kotlin文件中的定义:
名单:
元素的泛型有序集合。此接口中的方法只支持对列表的只读访问;通过MutableList接口支持读/写访问。
val numbers: MutableList<Int> = mutableListOf(1, 2, 3)
设置:
不支持重复元素的一般无序元素集合。此接口中的方法仅支持对集合的只读访问;通过MutableSet接口支持读/写访问。
val animals = mutableSetOf("Lion", "Dog", "Cat")
地图:
保存对象对(键和值)并支持有效检索每个键对应的值的集合。地图键是唯一的;映射仅为每个键保存一个值。此接口中的方法仅支持对映射的只读访问;通过MutableMap接口支持读写访问。
val populations = mutableMapOf(
Pair("Toronto", 3000),
Pair("Windsor", 400)
)
现在mutableListOf
,mutableSetOf
和mutableMapOf
,和listOf
,setOf
和mapOf
之间的区别是可变性。您可以向前面有可变
关键字的集合添加值,并且不能向前面没有可变
关键字的集合添加值。
以下是不可变集合的示例:
var nums = listOf(1, 2, 3, 4)
var names = setOf("Bob", "John", "Elizabeth")
var population = mapOf(
Pair("Windsor", 2000),
Pair("Toronto", 50000)
)
HashMap:
HashMap是一个基于MutableMap接口的Kotlin集合类。它以键值对的形式存储数据。
val hashMap:HashMap<Int,String> = HashMap<Int,String>()
阵列
表示一个数组(特别是针对JVM平台时的Java数组)*可以使用[arrayOf]、[arrayOfNulls]和[emptyArray]创建数组实例
.
参考:https://kotlinlang.org
Array
和Hashmap
是类Array
和Hashmap
的构造函数。
Array(size: Int, init: (Int) -> T)
HashMap(initialCapacity: Int, loadFactor: Float = 0.0f)
HashMap(initialCapacity: Int)
它们用于制作具有特定大小设置的集合。在通常情况下,你不需要它们。
// same as val arr = arrayOf(0, 2, 4, 8)
val arr = Array(4, index -> index * 2)
// map with initial capacity 8, which means that the map will prepare memory for 8 elements at the beginning.
val map = HashMap(8)
arrayOf
和mapOf
是返回具有与参数相同的元素的新集合的函数
inline fun <reified T> arrayOf(vararg elements: T): Array<T> (source)
fun <K, V> hashMapOf(vararg pairs: Pair<K, V>): HashMap<K, V> (source)
val arr1 = arrayOf(1, 2, 3, 4, 5, 6)
val arr2 = arrayOf("D", "E", "FG", "H")
val map1 = mapOf("a" to 2, "b" to 3)
val map2 = mapOf(4 to "SDF", 7 to "E", 8 to "T")
问题内容: 如果未初始化int数组的各个元素,则默认情况下存储在其中的内容是什么?我显然发现其中有一个空数组或空数组。有什么区别,哪一个适用于我的第一个问题? 问题答案: 从技术上讲,没有 null数组 之类的东西;但是由于数组是对象,所以数组类型是引用类型(即:数组变量仅保存对数组的 引用 ),这意味着数组变量可以而不是实际指向数组: 一个 空 数组是零长度的阵列; 它没有元素: (并且 永远不
我在网上阅读,找到了引用数组存储引用。如果我没有弄错的话,数组将存储变量的内存地址。如果这就是为什么我在循环字符串数组时看不到内存地址的原因,如下所示。 现在根据定义,arrNames数组将在arrNames[0]、arrNames[1]、arrNames[2]存储引用。这意味着内存地址将指向名字,如eJohn,Max和Alex。 如果它是基元数组,它将直接存储如下所示的值。 Num[0]将直接保
问题内容: 考虑以下基础: 任何人只能活在堆里 阵列IS-A 和 IS-A 我发现自己很难回答这样一个简单的问题: JVM和 JVM内部 有什么区别吗?还是仅在“编译时”才有意义? 问题答案: 运行时有所不同。 是原始int值的数组。是一个“对象”数组,其中包含对Integer对象的引用。 最重要的实际差异:无法持有价值观。 但是我仍然很困惑:是否仅存储原始值?如果是这样,这是否意味着原始类型可以
问题内容: 有两个链接 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#LNPLS99981和 在Oracle中使用不同类型的PL /SQL集合的目的 通过引用以上两个链接,我有两个疑问 1.哪个是正确的嵌套表? 2.如果oracle文档是正确的,嵌套表和关联数组有什么区别? 问题答案: 这是另一个未知的区别
问题内容: 在有关reshape()函数的numpy手册中,它说 我的问题是: 什么是连续和不连续数组?它类似于C中的连续内存块,例如什么是连续内存块? 两者之间在性能上有什么区别吗?我们什么时候应该使用其中一个? 为什么转置会使数组不连续? 为什么会c.shape = (20)引发错误incompatible shape for a non-contiguous array? 感谢您的回答! 问
%1有编译器错误,而%2是合法的。 为什么变量声明的类型必须与我们传递给对象类型的类型匹配(不允许派生类型)?我使用的数组如下所示,这是完全正确的: 有人能告诉我为什么集合必须声明为条件2吗?谢谢