Kotlin常用Collection集合操作整理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin常用Collection集合操作整理相关的知识,希望对你有一定的参考价值。

参考技术A

本篇记录了 Kotlin 常用集合的相关操作,用以熟练使用 Kotlin 里的相关集合。集合接口与相关函数位于 kotlin.collections 包中。

Kotlin 标准库提供了基本集合类型的实现: Set、List 以及 Map。 一对接口代表每种集合类型:

其中灰色是不可变集合,黄色是可变集合。 Iterator 意为迭代器, Collection 是只读接口,而 MutableCollection 是一个具有写操作的 Collection 接口:

List< T> 以指定的顺序存储元素,并提供使用索引访问元素的方法。从第一个元素索引0 到最后一个元素索引 (list.size - 1) 为止。 List 的默认实现是 ArrayList 。

执行结果会转化为 Map :

Set 内部是用 Map 实现的, Set 相关的实现详见: Java Collection系列之:HashSet、LinkedHashSet、TreeSet的使用及源码解析

Map<K, V> 不是 Collection 接口的继承者;但是它也是 Kotlin 的一种集合类型。 Map 存储 键-值 对(或 条目);键是唯一的,但是不同的键可以与相同的值配对。 Map 接口提供特定的函数进行通过键访问值、搜索键和值等操作。 Map 相关的实现详见: Java Collection系列之HashMap、ConcurrentHashMap、LinkedHashMap的使用及源码分析

Iterable 处理包含多个步骤时,每个处理步骤完成并返回其结果——中间集合,然后在此集合上执行后续步骤。 Sequence 序列仅当请求整个处理链的结果时才进行实际计算: Sequence 对每个元素逐个执行所有处理步骤。

结论 :序列可避免生成中间步骤的结果,从而提高了整个集合处理链的性能。 但是,序列的延迟性质增加了一些开销,这些开销在处理较小的集合或进行更简单的计算时可能很重要。 因此,应该同时考虑使用 Sequence 与 Iterable ,并确定在哪种情况更适合。

执行结果:

执行结果:

上述序列中, Sequence 处理需要 18 个步骤, Iterable 需要 23 个步骤来执行列表操作,上述示例参见 Sequence序列操作 。

创建与现有集合具有相同元素的集合,可以使用复制操作,例如 toList()、toMutableList()、toSet() 等等。标准库中的集合复制操作创建了具有相同元素引用的 浅复制 集合。 因此, 对集合元素所做的更改会反映在其所有副本中,如果对源集合进行添加或删除元素,则不会影响副本 。

排序主要使用 Comparable 及 Comparator 。其中 Comparable 可以理解为是内部排序, Comparator 是外部排序。

集合排序示例:

JAVA常用知识(mian shi)点总结---集合

一、Collection 与 Collections的区别:
1. Collections:
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。


2. Collection:
Collection是最基本集合接口,它定义了一组允许重复的对象,提供了对集合对象进行基本操作的通用接口方法,其意义是为各种具体的集合提供了最大化的统一操作方式。


二、Collection 基础:
1. Collection接口派生了两个子接口Set和List,分别定义了两种不同的存储方式,如下:

(1)List  是实现了List接口的集合类,有序且可以重复,两个重要的实现类 ArrayList和LinkedList,特性如下:
        ArrayList: 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
        LinkedList:底层是使用了双向链表数据结构实现的, 特点: 查询速度慢,增删快。 
  Vector(不常用):  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

(2)Set 是实现了Set接口的集合类,无序且不可重复。两个重要的实现类HashSet和TreeSet
  HashSet:  底层是使用了哈希表来支持的,特点: 存取速度快. 
  TreeSet:   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。


2. Collection接口中的方法:

(1) 增加
  add(E e)  添加成功返回true,添加 失败返回false.
  addAll(Collection c)  把一个集合 的元素添加到另外一个集合中去。

(2) 删除
  clear() 
  remove(Object o) 
  removeAll(Collection  c) 
  retainAll(Collection  c) 

(3) 查看
  size()

(4)  判断
  isEmpty() 
  contains(Object o) 
  containsAll(Collection<?> c) 

(5) 迭代
  toArray() 
  iterator() 

3. Map&Iterator接口及Comparable接口
1) Map接口:
该接口描述了从不重复的键到值的映射。Map接口用于维护键/值对(key/value pairs)。
        特征:它描述了从不重复的键到值的映射。两个重要的实现类:HashMap和TreeMap
        HashMap:基于哈希表实现,特点就是键值对的映射关系。一个key对应一个Value。HashMap中元素的排列顺序是不固定的。更加适合于对元素进行插入、删除和定位。
        TreeMap:基于红黑树实现。TreeMap中的元素保持着某种固定的顺序。更加适合于对元素的顺序遍历。

2) Iterator接口:
  集合访问器,用于循环访问集合中的对象。所有实现了Collection接口的容器类都有iterator方法,用于返回一个实现了Iterator接口的对象。
Iterator对象称作迭代器,Iterator接口方法能以迭代方式逐个访问集合中各个元素,并可以从Collection中除去适当的元素。

3) Comparable接口:
可以用于比较的实现,实现了Comparable接口的类可以通过实现comparaTo方法从而确定该类对象的排序方式。

三、HashMap和Hashtable的区别
1. HashTable:
  线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。
Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好,单线程环境下它比HashMap要慢。

2. HashMap:
  非synchronized,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行。
  HashMap不能保证随着时间的推移Map中的元素次序是不变的。
  另外,HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。

 

未完待续。。。。。。

 









































以上是关于Kotlin常用Collection集合操作整理的主要内容,如果未能解决你的问题,请参考以下文章

Java集合常用类特点整理

Java 类集初探

集合常用类及方法汇总

Kotlin集合操作整理

Kotlin实战Kotlin中集合的创建

Kotlin实战Kotlin中集合的创建