Groovy中的集合
集合的使用是非常的广泛的。
Groovy中集合的特点
-
Groovy直接在语言内部使用集合,
- 它不用导入专门的类
- 不用初始化对象
- 集合是语言本身的本地成员
每个Groovy集合都是Java.util.Collenction或Java.util.Map的
实例
。List,String,StringBuffer,Range,Map,File,Matcher都使用统一的size()方法来获取长度的。
StringBuffer x = new StringBuffer(“ssss”)
print x.size()//输出4
Groovy中的List
定义一个列表
def toys = [[‘a’,’001’],[2,’002’],[‘c’,’003’]]
print toys.class //输出的是:java.util.ArrayList
操作数组
通过下标操作数组对象,索引从0开始
获取
print toys[0]//输出:索引从0开始,输出[‘a’,’001’]
println toys.get(0)//通过get方法获取:输出[‘a’,’001’]
println toys[-2]//从后向前数,第二个 输出:[2,’002’]
println toys[1..<2]//范围,从开始小于2的 输出:[2,’002’]
修改
toys[2] = [3,’003’]
toys.putAt(2,[33,’333’])
println toys[-1]
添加元素
toys << [4,’004’]//追加一个列表(追加的是一个列表)
toys << ‘8’//追加了一个元素
两个列表的连接
toys1 = [1,2,3]
toys2 = toys1 + [4,5]
println toys2 //输出:[1,2,3,4,5]
从列表中删除元素
toys3 = toys2 -[5]
pirntln toys3//输出:[1,2,3,4]
List 中的一些方法
def list = [1,2,3]
list.add(4) //[1,2,3,4]
list.add(3,9)//[1,2,3,9,4]
list.addAll([10,11])//[1,2,3,9,4,10,11]
println list.contains(11)//true
println list.containaALL([2,3]) //true
println list.indexOf(11) //6
删除元素
list.remove(11)//[1,2,3,9,4,10]
list.removeAll([2,3])//[1,9,4,10]
list.clear()//[]
list.pop()删除列表最后的元素
排序
list.sort()
统计重复元素个数
list.count(2)//统计列表中的2的个数
注意:这些方法中,有些会修改原列表内容,而有些又不会修改原来的列表,而只是返回一个修改的新的列表。我们编程时需要注意哦。
下面是一些返回新列表的方法:
def list = [1,2,[3,4,5]]
list.flatten()//展开后返回新的列表 [1,2,3,4,5]
list.intersect([2,4,5])//求交集 [2]
list.reverse()//反转列表,返回新的列表
Groovy中的Map(映射)
定义映射
def map = [:]//一个空map
println map.getClass()//输出java.util.LinkedHashMap
map.size()方法返回元素个数
KV
def map = [1:’toy1’,2:’toy2’]
map.containsValue(“toy1”)//是否包含value true
map.containsKey(1)//是否包含key true
Map的基本操作
println map //输出整个的map内容[1:’toy1’,2:’toy2’]
map[2]//获得key==2的值。
map.get(1)//key==1的值
遍历Map(映射)元素,并且通过闭包执行对应的操作
map.each{toy -> println toy.key + “:” +toy.value}
注意:each函数,就替代了java中的迭代器。
添加元素
map.put(3,”toy3”)//如果key 3 已经存就会覆盖值。
删除
map.remove(2)
获取Map的key
map.keySet()//,输出[1,2]
map.values()//获取Map中的value,输出[“toy1”,”toy2”]
map.asList()//转换为ArrayList对象
范围
范围是Groovy的特性
范围定义
def range = 1..<5//从1开始小于5的数值[1,2,3,4]
范围类型:groovy.lang.IntRange 是特殊的List
def range = ‘a’..<’e’//也是一个范围,[a,b,c,d]
类型:groovy.lang.ObjectRange 是特殊的List
倒序范围
range = 5..1//[5,4,3,2,1]
range = ‘e’..<’b’ //[‘e’,’d’,’c’]
范围的方法
def range = 1..10
range.size()//输出10
range.contains(5) //输出5
range.get(8)// 下标为8 的值 输出9
range.getFrom()//范围开始值 输出:1
range.getTo()//范围结束值 输出:10
range.isReverse()//是不是倒序 输出FALSE
range.subList(3,6)子范围 输出:[4,5,6]