Kotlin/Java之常用“集合型”数据类型

2023-11-10

****** 先说说数组 Array 和 ArrayList ******  
<数组 Array>
整型数组初始化:val point = intArrayOf(0, 0)   // 实为IntArray,对应Java类型 int[]
其他还有:charArrayOf、byteArrayOf、longArrayOf、floatArrayOf、booleanArrayOf等,详见Library.kt

泛型Array<T>:
val array = arrayOf(1, 2, 3)  // 实为Array<Int>,对应Java类型 Integer[]
val array = arrayOf("a", "b", "c")   // 没有mutableArrayOf()!!!

注:IntArray性能更好!
Java中的 int[] Integer[] 有啥区别呢?不用多解释了吧... int是Java的基本数据类型,Integer是int的包装类(属于引用数据类型)

<数组列表 ArrayList>
// ArrayList、HashMap、HashSet等定义在 TypeAliases.kt,实际为java.util.*中的数据类型的别名
// 几种使用方式:
data class Feature(val name: String, val value: Int, var supported: Boolean = false)
val effectList = ArrayList<Feature>()
effectList.add(Feature("tick", "100", true)) // 元素是自定义数据对象
...
val list = ArrayList<String>()
list.add("a")
...
val list = arrayListOf("Shanghai", 200, 3.14)  // 元素数据类型各不相同
list.add("Beijing")
...

val map = HashMap<String, Int>()  // 顺便对比一下
map.put("Apple", 1)
map["Banara"] = 2
...

== Array与ArrayList的主要区别 ==
* 初始化:Array须指定大小,ArrayList不必
* Array只能存同构对象(声明为object[]的除外),ArrayList可以存异构
* Array不能增删元素,ArrayList可以
Array.toList() 可以返回一个List<T>列表
ArrayList.toArray() 可以返回一个object[]数据
参考文章:https://www.cnblogs.com/java-friend/p/11770169.html

List有两个具体实现:ArrayList和LinkedList
ArrayList底层是由数组实现的,实现一个可变长度的动态数组;
LinkedList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能,但在get与set方面弱于ArrayList。


****** List、Set、Map ******  // 没有mutableArrayOf() !!!
快速初始化 val list = listOf("Apple", "Banana", "Orange")  // 创建了不可变list,对比 mutableListOf
初始化可变列表 val list = mutableListOf("Apple", "Banana", "Orange")  // 后续可以调用list.add("Pear")

遍历:
for (fruit in list) {
        println(fruit)
}
list.forEach {
        println(it)
}

类似,val set = setOf("Apple", "Banana", "Orange")  // 以及mutableSetOf
set与list的区别:set底层使用hash映射机制来存储数据,集合中的元素无法保证有序!

val map = mapOf("Apple" to 1, "Banana" to 2, "Orange" to 5) // 以及mutableMapOf
for ((fruit, number) in map) {
     println("$fruit - $number")
}
map.forEach {
     Log.v(TAG, "${it.key} - ${it.value}")
}

// 非常贴心的getOrPut()
// 适用场景:延迟加载-初始化
val map2 = mutableMapOf("Apple" to 1, "Banana" to 2, "Orange" to 5)
val num = map2.getOrPut("Cherry") {
      // 做必要的加载和赋值
      // ...
}


****** Kotlin集合的函数式API ****** // 详见_Collections.kt
val ele = list.maxByOrNull { it.length }  // 按“规则”取最大值,e.g. 字符串最长的那个
val newList = list.map { it.uppercase() } // 按“规则”做映射生成新list,e.g. 全部转成大写字母
val newList = list.filter { it.length <= 5} // 按“规则”过滤生成新list,e.g. 挑出长度不大于5的元素
判断函数:
val result = list.any { it.length <= 5 } // 返回布尔型,判断:集合中是否存在至少一个元素满足指定条件
val result = list.all { it.length <= 5 } // 返回布尔型,判断:集合中是否所有元素满足指定条件

****** 数据库 ******
val values = ContentValues()   // [对比] map中元素的key/value是固定类型
values.put("name", "Game of Thrones")
values.put("price", 38.8)
...
// KTX库中提供的便捷用法
val values = contentValuesOf("name" to "Game of Thrones", "price" to 38.8, "pages" to 800)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin/Java之常用“集合型”数据类型 的相关文章

  • Parcelable 写入可序列化对象 getactivity() 时遇到 IOException

    所以我在 logcat 中得到了这个 java lang RuntimeException Parcelable encountered IOException writing serializable object name com re
  • GCM 通知的自定义 UI

    In GCM Docs http developer android com google gcm gcm html其给定 它不提供任何内置用户界面或其他处理 消息数据 GCM 只是将收到的原始消息数据直接传递给 Android 应用程序
  • 不支持动态值作为注释中的属性 - AspectJ Android [AOP Android]

    我正在使用自定义注释来记录用户单击的 id 但我收到一个错误 属性值必须是常量 我的代码片段如下 mAssetId Asset getContentId TrackEvent track event ArrayParams Params k
  • 如何设置itemTouchHelper选择性滑动?

    所以我在 recyclerview rv 上实现了这个 itemtouchhelper simple 回调 现在 在这个 rv 中 我根据内容类型将 2 种布局设置为一行 因此 当我在 rv 上设置此 touchhelper 时 它正在这两
  • 以编程方式启用/禁用广播接收器

    我们有一个可以扫描蓝牙设备的应用程序 负责扫描的代码应仅在启用蓝牙时运行 此外 我们希望随时禁用 启用此功能 我们选择实现一个注册BluetoothAdapter ACTION STATE CHANGED广播的BroadcastReceiv
  • API 31 上是否有官方方法来提供文件关联,可能使用 pathSuffix/pathAdvancedPattern?

    背景 现代桌面操作系统上的一个众所周知的功能是能够处理文件 允许用户从文件管理器和其他应用程序中打开它们 作为 文件关联 配置 问题 到目前为止 对于用户和开发人员来说 在 Android 上设置文件类型关联并不是一件很方便的事情 在 An
  • 使用 ArrayAdapter 的 ListView 中的按钮

    我有一个使用 POJO 类填充的 ArrayAdapter 列表视图由 2 个布局组成 1 代表菜单项 1 代表类别 带分隔符的列表视图很好 后来我尝试在每个菜单项行中添加一个按钮来编辑其中的详细信息 当我尝试获取单击按钮的行的位置时 我遇
  • 可以混淆/加密 SharedPreferences 文件吗?

    因此 我对混淆应用程序的 SharedPreferences xml 文件很感兴趣 就像 Android LVL 混淆其许可证 cahce 数据一样 这是可以想象的吗 大量的谷歌挖掘几乎没有产生任何可能解决我的问题的结果 我当然不是密码学家
  • 尝试使用掩码裁剪位图会抛出 IllegalArgumentException:

    我正在使用以下代码 public void cropSelection Bitmap bitmap annotationBitmap copy annotationBitmap getConfig true Canvas canvas ne
  • 如何区分ActionBarSherlock中的两次菜单项点击?

    我最近一直在使用 ActionBarSherlock 并按照各种教程 我编写了这段代码来将项目添加到操作栏 Override public boolean onCreateOptionsMenu Menu menu menu add Ref
  • 无法解析配置“:app:debugRuntimeClasspath”的所有文件。问题

    我的 android studio 遇到了下一个问题 导致 org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveEx
  • Droid 3 上的列表视图背景为灰色

    我有一个带有自定义背景的列表框 它在黑色背景的两侧显示一条细白线 在我所有的测试手机 Galaxy Captivate Vibrant Nexus 1 G Tablet Archos 32 Droid 上运行良好 我刚买了一台 Droid
  • Android:每秒更新蓝牙 RSSI

    我试图每秒显示蓝牙信号强度 RSSI Timer 来自检测到的设备 但我无法调用onRecive 多次因为接收器生命周期 http developer android com reference android content Broadc
  • 创建用于 Android 库分发的 JAR

    我正在开发一个 android 库 并希望导出一个 JAR 文件 我可以分发该文件供其他人在他们的应用程序中使用 我不想分发源代码 因为它包含有关发布到我的网络服务器的详细信息 我尝试使用在 bin 目录中创建的 JAR 文件并将该 jar
  • 为什么设置 MediaRecorder 时显示错误 IllegalStateException?

    我的代码设置 MediaRecorder 它显示行集质量错误 mMediaRecorder new MediaRecorder Step 1 Unlock and set camera to MediaRecorder mCamera st
  • Android - 具有可序列化对象的 SharedPreferences

    我知道 SharedPreferences 有putString putFloat putLong putInt and putBoolean 但我需要存储一个类型的对象Serializable in SharedPreferences 我
  • 如何为工具栏上的溢出菜单中的菜单项设置字体

    我想更改项目的默认字体溢出菜单并设置自定义字体 我尝试添加一个工厂LayoutInflater并在onCreateView 方法我改变了TextView的字体 但这没有用 这是代码 在 onCreateOptionsMenu 内 getLa
  • 我的 apk 文件在模拟器中的位置

    我在 eclipse android 中编写了一个小程序 现在我安装并运行我的程序 它是一个 apk 现在我想知道我的 apk 文件在哪里 我什至想将它 拉 到我的系统中 是否可以 如果是这样请帮助我 如果您只想将 apk 安装在手机或类似
  • 如何在对话框中配置自定义按钮?

    这里我有一个自定义对话框 里面有背景 2 ImageButton 问题是 当我尝试为该按钮设置 onclick 侦听器时 程序将返回 NullPointerException 我不知道为什么会发生这种情况 无论如何如何将操作分配给对话框内的
  • Android进程调度

    我试图更好地理解 以便在创建 Android 应用程序 服务时确定潜在的互操作性问题对可靠性的影响 我想弄清楚进程优先级是如何确定的 服务和活动之间优先级的差异以及调度程序是否以不同方式对待它们的优先级 基本上 我试图深入了解某个活动或服务

随机推荐

  • vue-element-admin 后台管理系统

    文章目录 前言 一 vue element admin 是什么 二 使用步骤 下载和部署 浏览模板项目代码 官网 启动 三 技术提炼 1 vue全家桶都有什么 2 vuex 什么时候用文件 什么时候直接写vue页面 导航守卫 3 组件之间的
  • 机器学习期末考试

    机器学习期末考试 一 机器学习链接 1 机器学习期末复习试卷 zhouyan2000的博客 CSDN博客 机器学习期末考试 2 机器学习笔试题 4条消息 机器学习笔试题目 北冥有小鱼 CSDN博客 机器学习题目 3 机器学习面试题 4 一天
  • 【Kubernetes理论篇】Kubernetes核心组件及资源介绍

    文章目录 一 Kubernetes架构 二 Kubernetes核心组件 三 Kubernetes核心资源 四 拓展 1 Service和Ingress的区别是什么 2 Replicaset和Deployment的区别是什么 3 Deplo
  • Flink 错误:找不到参数 evidence$ 的隐式值:TypeInformation 大数据

    Flink 是一个流处理和批处理框架 被广泛应用于大数据领域 在使用 Flink 进行开发时 有时会遇到各种各样的错误和异常 本文将详细介绍一种常见的错误情况 即在 Flink 中遇到的 No implicits found for par
  • Pycharm最新版如何设置自动换行

    1 代码编辑区自动换行 对所有文件有效 1 File gt Settings gt Editor gt General 2 找到Soft Wraps 勾选Soft wrap files 3 在输入框中添加 py 如下图所示 2 在图示位置点
  • 使用python和pyqt5轻松上手人脸识别系统(含代码)

    使用python和pyqt5轻松上手人脸识别系统 含代码 一 环境配置 1 1 python环境配置 1 1 1 安装 anaconda 1 1 2 安装pycharm 1 1 3 配置pip源 1 2 mysql数据库安装 1 3 相关依
  • Windows下,Eclipse的Android NDK(r8e) 配置

    一 关于NDK Android NDK全称 Native Development Kit 即本地开发包 1 NDK是一系列工具的集合 NDK提供了一系列的工具 这些工具对开发者的帮助是巨大的 它们能帮助开发者快速开发C 或C 的动态库 并能
  • windows怎么部署项目到云服务器

    要将项目部署到云服务器 可以按照以下步骤进行操作 1 在云服务提供商上创建一个云服务器实例 并确保已经将其配置和启动 2 在本地开发环境中将项目打包成可执行文件或者jar包 并确保项目能够正确运行 3 使用远程连接工具 如SSH RDP等
  • ctfshow萌新web17

    c传参过滤掉php 思路 include文件包含 利用日志文件包含 访问日志文件 c var log nginx access log 发现日志文件记录了user agent头 于是在该头中插入一句话木马 再访问日志文件 看日
  • AMBA总线协议AHB、APB、AXI对比分析

    一 AMBA概述 AMBA Advanced Microcontroller Bus Architecture 高级处理器总线架构 AHB Advanced High performance Bus 高级高性能总线 ASB Advanced
  • Uniapp中vueX实现登录状态功能

    uniapp使用Vuex实现登录状态的判断 退出登录 使用action commit实现登录功能 Vue use Vuex export default new Vuex Store state token userid username
  • 了解CMS(Concurrent Mark-Sweep)垃圾回收器

    原文地址为 了解CMS Concurrent Mark Sweep 垃圾回收器 一字不差的贴的人家的 就是感觉写的比较好 贴出来了 羞羞 1 总体介绍 CMS Concurrent Mark Sweep 是以牺牲吞吐量为代价来获得最短回收停
  • 使用git和maven过程一些命令

    git常用命令 1 git status 查看文件在工作目录与缓存的状态 2 git add 添加所有的文件到缓存 3 git commit m 提交的描述信息 如果我们这里不用 m参数的话 git将调到一个文本编译器 通常是vim 来让你
  • mysql5.7 leftjoin group by(获取关联表最新数据)

    用户表 users 日志表 logs 外键 user id 创建时间 created at 获取所有用户最新的日志 SELECT b from SELECT user id max created at as maxtime from lo
  • nafxcwd.lib(afxmem.obj) error lnk2005

    最近写程序突然遇到个错误 nafxcwd lib afxmem obj error lnk2005 查了下msdn发现主要原因是同时使用了CRT中的new delete和MFC中的new delete重载导致的 参考 http suppor
  • RabbitMq基本概念 = >实践DirectExchange和TopicExchange交换机模式

    AMQP 和IM的区别 AMQP 高级消息队列 1 可以一对多广播 也可以一对一广播 2 生产者和消费者不知道对方是谁 IM 1 只能一对一广播 2 生产者和消费者知道对方是谁 RabbitMQ 只是消息代理 我们不生产消息 我们只是消息的
  • 怎样成为一名优秀的程序员?

    新加坡国立大学计算机系有两门课 CS 1101 1102 几乎所有的大学计算机系课程都有两门类似的课程 但几乎所有的学生都误解了这两门课 以为前者是教C 后者是教java 但实际上前者是 Programming Methodology 后者
  • Java学习笔记——34多线程01

    多线程 实现多线程 进程和线程的区别 多线程的实现方式 方式一 继承Thread类 设置线程名称 线程调度 线程控制 线程生命周期 方式二 实现Runnable接口 实现多线程 进程和线程的区别 进程 是正在运行的程序 是系统进行资源分配和
  • Netstat命令详解(Windows)

    Netstat 用于显示与IP TCP UDP 和ICMP 协议相关的统计数据 一般用于检验本机各端口的网络连接情况 如果你的计算机有时候接收到的数据报导致出错数据或故障 你不必感到奇怪 TCP IP 可以容许这些类型的错误 并能够自动重发
  • Kotlin/Java之常用“集合型”数据类型

    先说说数组 Array 和 ArrayList lt 数组 Array gt 整型数组初始化 val point intArrayOf 0 0 实为IntArray 对应Java类型 int 其他还有 charArrayOf byteArr