声明: 以下代码大致来源于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
}
}