Skip to content

Latest commit

 

History

History
146 lines (123 loc) · 3.57 KB

Groovy数据结构示例.md

File metadata and controls

146 lines (123 loc) · 3.57 KB
/**
 * Groovy数据结构语法示例
 *
 * @author DuChao* @date 2021/9/1 3:18 下午
 */
class DataStructure {

    static void main(String[] args) {
//        array()

//        list()

//        listCrud()

//        map()

//        mapOperate()

        range()
    }

    /**
     * 1、数组
     *
     在 Groovy 中使用 [ ] 表示的是一个 List 集合,如果要定义 Array 数组,我们就必须强制指定为一个数组的类型
     */
    static void array() {
        def array = ['张三', '李四', '王五'] as String[]
        println array.class
        println array
    }

    /**
     * 2、List
     * 2.1、列表集合定义
     *
     1、List 即列表集合,对应 Java 中的 List 接口,一般用 ArrayList 作为真正的实现类
     2、定义一个列表集合的方式有点像 Java 中定义数组一样
     3、集合元素可以接收任意的数据类型
     */
    static void list() {
        def list1 = [1, 2, 3]
        println list1.class
        println list1

        def list2 = [1, '张三', true]
        println list2.class
        println list2

        LinkedList list3 = [1, 2, 3]
        def list4 = [1, 2, 3] as LinkedList
        println list3.class
        println list4.class
    }

    /**
     * 4.2、列表集合增删改查
     */
    static void listCrud() {
        def list = [1, 2, 3]
        // 增加元素
        list.add 20
        list.leftShift 30
        list << 40
        println list

        // 删除元素(根据下标删除)
        list.remove(0)
        println list

        // 修改元素(根据下标修改)
        list[0] = 10
        println list

        // 查询元素
        list.find { println it }
    }

    /**
     * 3、Map
     * 3.1 定义
     *
     1、Map 表示键-值表,其底层对应 Java 中的 LinkedHashMap
     2、Map 变量由[:]定义,冒号左边是 key,右边是 Value。key 必须是字符串,value 可以是任何对象
     3、Map 的 key 可以用 '' 或 "" 或 ''' '''包起来,也可以不用引号包起来
     */
    static void map() {
        def map = [a: 1, 'b': true, 'c': "Groovy", '''d''': '''ddd''']
        println map
    }

    /**
     * 3.2 Map常用操作
     */
    static void mapOperate() {
        def map = [a: 1, 'b': true, 'c': "Groovy", '''d''': '''ddd''']

        /**
         * 元素访问
         * 1、map.key
         * 2、map[key]
         * 3、map.get(key)
         */
        println map.a
        println map['b']
        println map.get('c')

        /**
         * 元素的添加和修改
         * 如果当前 key 在 map 中不存在,则添加该元素,如果存在则修改该元素
         */
        map.put('key', "value")
        println map
        map.put('key', 'v')
        println map

        /**
         * Map遍历
         * 1、each:闭包一个参数即 entry,两个参数即 key value
         * 2、eachWithIndex:比 each 多个下标属性
         */
        map.each {println it}
        map.each {k,v -> println k + '\t' + v}
        map.eachWithIndex { k, v,i -> println k + '\t' + v + '\t' + i}
    }

    /**
     * 4、Range
     *
     1. Range表示范围,是List的一种扩展,由 begin 值 + 两个点 + end 值表示
        如果不想包含最后一个元素,则 begin 值 + 两个点 + < + end 表示
     2. 通过 aRange.from 与 aRange.to 来获对应的边界元素
     */
    static void range() {
        def range1 = 1..5
        range1.each { println it}
        println range1.from + "\t" + range1.to

        def range2 = 1..<5
        range2.each { println it}
    }

}