java 判断list是否越界,list集合变化和下标越界

[TOC]

### list集合变化操作

可以通过slice、subList、drop、dropLast对集合进行变换,产生一个新的集合。

slice()方法,对集合进行截取,产生一个新的集合,接收一个区间类型的参数,方法签名如下:

~~~

public fun List.slice(indices: IntRange): List {

if (indices.isEmpty()) return listOf()

return this.subList(indices.start, indices.endInclusive + 1).toList()

}

~~~

subList ()方法,对集合进行截取,产生一个新的集合,方法接收截取的开始位置和结束位置,方法签名如下:

~~~

override fun subList(fromIndex: Int, toIndex: Int): MutableList

~~~

drop ()方法,对集合进行丢弃,产生一个新的集合,从集合开始位置进行丢弃,方法接收丢弃元素的个数,方法签名如下:

~~~

public fun Iterable.drop(n: Int): List {

............................

}

~~~

dropLast ()方法,对集合进行丢弃,产生一个新的集合,从集合结束位置进行丢弃,方法接收丢弃元素的个数,方法签名如下:

~~~

public fun List.dropLast(n: Int): List {

require(n >= 0) { "Requested element count $n is less than zero." }

return take((size - n).coerceAtLeast(0))

}

~~~

我们通过一个案例,来看看集合的变化操作,参考代码:

~~~

fun main(args: Array) {

val list = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8, 9)

//截取[0,2]

var newList: List? = null

newList = list.slice(0..2)

println("slice(0..2):$newList")

//截取[0,2)

newList = list.slice(0 until 2)

println("slice(0 until 2):$newList")

//截取[0,2)

newList = list.subList(0, 2)

println("subList(0,2):$newList")

//正向删除3个元素

newList = list.drop(3)

println("正向删除3个元素drop(3):$newList")

//反向删除3个元素

newList = list.dropLast(3)

println("反向删除3个元素dropLast(3):$newList")

}

~~~

运行结果

```

slice(0..2):[1, 2, 3]

slice(0 until 2):[1, 2]

subList(0,2):[1, 2]

正向删除3个元素drop(3):[4, 5, 6, 7, 8, 9]

反向删除3个元素dropLast(3):[1, 2, 3, 4, 5, 6]

Process finished with exit code 0

```

### list集合下标越界问题

list集合下标越界,可以说是list集合操作的一个经典问题。是什么list集合下标越界呢?我们在用list集合下标去获取元素的时候,如果给定的下标大于了list集合长度或者下标为负数,则会出现下标越界异常,程序会抛出ArrayIndexOutOfBoundsException异常,

我们先把下标给成负数,参考案例:

![](http://upload-images.jianshu.io/upload_images/7368752-968f1b4045bcbe7b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

我们再把下标超出list集合长度,参考案例:

![](http://upload-images.jianshu.io/upload_images/7368752-1f584dde77160bc1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值