🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### set集合变换 set集合的变换,如果是HashSet,有一个drop方法。如果是TreeSet可以使用headSet、subSet、tailSet三个方法进行变换。 drop()方法,对集合进行丢弃,产生一个新的集合,从集合开始位置进行丢弃,方法接收丢弃元素的个数,方法签名如下: ~~~ public fun <T> Iterable<T>.drop(n: Int): List<T> { ......................... } ~~~ 我们通过一个案例,来看看HashSet接口的变化操作,参考代码: ~~~ fun main(args: Array<String>) { val set = mutableSetOf(1, 1, 2, 2, 3, 3) var list: List<Int>? = null list = set.drop(1) println("drop(1):${list}") } ~~~ 运行结果 ``` drop(1):[2, 3] Process finished with exit code 0 ``` headSet(EtoElement),对集合截取,返回一个新的集合,截取范围[开始,toElement),方法签名如下: ~~~ public SortedSet<E> headSet(E toElement) { return headSet(toElement, false); } ~~~ subSet(EfromElement,E toElement),对集合截取,返回一个新的集合,截取范围[fromElement,toElement),方法签名如下: ~~~ public SortedSet<E> subSet(E fromElement, E toElement) { return subSet(fromElement, true, toElement, false); } ~~~ tailSet(EfromElement),对集合截取,返回一个新的集合,[fromElement,结尾],方法签名如下: ~~~ public SortedSet<E> tailSet(E fromElement) { return tailSet(fromElement, true); } ~~~ 我们通过一个案例去了解下,参考代码: ~~~ fun main(args: Array<String>) { val treeSet = TreeSet<Int>() treeSet.add(0) treeSet.add(1) treeSet.add(3) treeSet.add(5) treeSet.add(7) treeSet.add(9) //5之前的元素,[开始,toElement] val headSet = treeSet.headSet(5) println("headSet:${headSet}")//[0, 1, 3] //3到7之间的元素,[fromElement,toElement) val subSet = treeSet.subSet(3, 7) println("subSet:${subSet}")//[3, 5] //3之后的元素,[fromElement,结尾] val tailSet = treeSet.tailSet(3) println("tailSet:${tailSet}")//[3, 5, 7, 9] } ~~~ 运行结果 ``` headSet:[0, 1, 3] subSet:[3, 5] tailSet:[3, 5, 7, 9] Process finished with exit code 0 ``` ### set集合下标越界问题 set集合定位元素的时候不是用get方法,使用的是elementAt方法、elementAtOrNull方法,使用elementAt方法可能出现数组越界问题。如果传入索引是负数或者超出了集合的长度,也会出现下标越界异常。 我们先看,下标为负数的情况,参考代码: ![](http://upload-images.jianshu.io/upload_images/7368752-e3a592c18c01eeb7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我们再看,下标超出集合长度的情况,参考代码: ![](http://upload-images.jianshu.io/upload_images/7368752-e66ad13d9f777cbd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)