groovy 列表

声明: 以下代码大致来源于Groovy入门经典,是在学习的过程中进行的相关测试及记录的内容。

import groovy.test.GroovyTestCase;
import org.junit.Test

class List627 extends GroovyTestCase {
    @Test
    void testExample1() {
        //groovy 列表使用操作符 []来标识单个元素,同时 []操作符就是List类中定义的getAt()方法,当使用[]引用列表元素时实际上是List列表对象调用了getAt()方法.
        def numbers = [11, 12, 13, 14]  //列表含有四个元素
        println "第0个元素的值为" + numbers[0]  //第0个元素的值为11
        println "第3个元素的值为" + numbers[3]  //第3个元素的值为14

        //如果整型索引为负数,则其引用的元素从列表末端开始向前移动
        println "倒数第1个元素的值为" + numbers[-1]  //倒数第1个元素的值为14
        println "倒数第2个元素的值为" + numbers[-2]  //倒数第2个元素的值为13

        //如果索引值大于列表长度,值为null
        println "第5个元素的值为" + numbers[5]  //第5个元素的值为null(使用numers.get(5)时 java.lang.IndexOutOfBoundsException: Index: 5, Size: 4)
    }

    @Test
    void testExample2() {
        //索引字段同样可以用于列表
        println "值为" + [11, 12, 13, 14][3] //值为14


        def numbers = [11, 12, 13, 14]  //列表含有四个元素

        //通过索引范围操作列表, 包含边界的索引范围[start..end](从start开始到end结束)将返回一个列表对象,
        //不包含边界的索引范围[start..<end](从start开始到不包含end结束)
        println "numbers对象0..2的值为" + numbers[0..2] //numbers对象0..2的值为[11, 12, 13] (class: java.util.ArrayList)
        println "numbers对象0..<2的值为" + numbers[0..<2] //numbers对象0..<2的值为[11, 12] (class: java.util.ArrayList)


        //赋值操作
        numbers[1] = 66  //列表为[11, 66, 13, 14]
        println "列表为" + numbers

        numbers[0] = [66, 23]  //列表为[[66, 23], 12, 13, 14]
        println "列表为" + numbers

        numbers[0..<2] = [1,2,3]  //列表为[1, 2, 3, 13, 14]
        println "列表为" + numbers
    }

    @Test
    void testExample3() {
        def numbers = []
        if(numbers) {  //当numbers不为空及长度大于1时
            println "有元素存在"
        } else { //空列表时被输出
            println "无元素存在"
        }

        numbers =  [11, 12, 13, 14]

        println "反转后的新列表为" + numbers.reverse()  //返回新列表 [14, 13, 12, 11]
        println "当前列表为" + numbers //[11, 12, 13, 14]
        println "当前列表调用pop的结果为" + numbers.pop()  //删除列表中的第一个值,并返回该值 11
        println "当前列表为" + numbers //删除列表后的numbers: [12, 13, 14]

    }


    @Test
    void testLeftShift() {
        def numbers = [11, 12, 13, 14]  //列表含有四个元素
        //通过<<运算符(即leftShift()方法),可以将一个新元素追加到列表的后面
        numbers << 15  //列表为[11, 12, 13, 14, 15]
        println "列表为" + numbers
    }

    @Test
    void testPlush() {
        def numbers = [11, 12, 13, 14]  //列表含有四个元素
        //通过+运算符(即plush()方法),可以连接两个列表,返回新列表
        numbers = numbers + [15, 16]  //列表为[11, 12, 13, 14, 15, 16]
        println "列表为" + numbers
    }

    @Test
    void testMinus() {
        def numbers = [11, 12, 13, 14]  //列表含有四个元素
        //通过-运算符(即minus()方法),从列表删除元素,返回新列表
        numbers = numbers - [13]  //列表为[11, 12, 14]
        println "列表为" + numbers
    }



    @Test
    void testIntersect() {
        def numbers = [11, 12, 13, 14]  //列表含有四个元素

        println numbers.intersect([12, 14, 15])  // [12, 14],返回两个列表共同拥有元素的新列表

    }

    @Test
    void testExample4() {
        def arr1 = [11, 12, 13, 14]
        def arr2 = [13, 14, 15]
        //获取两个集合中,第一个集合所特有的元素
        println getFirstListSpecificElement(arr1, arr2)  //[11, 12]
        println getFirstListSpecificElement(arr2, arr1) //[15]
    }

    def List getFirstListSpecificElement(list1, list2) {
        def commonArr = list1.intersect(list2)  //获取两个list共有的列表
        List newArr = list1.clone()  //复制副本
        newArr.removeAll(commonArr)
        return newArr
    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值