07_Collection集合1

本文详细介绍了Java中的Collection框架,包括单列集合(如ArrayList)和双列集合(如Map),以及它们的特点、常用方法和遍历方式,如迭代器、增强for循环和lambda表达式的应用。

集合体系结构

Collection 代表单列集合,每个元素(数据)只包含一个值

Map 代表双列集合,每个元素包含两个值(键值对)

Collection 框架集合

Collection 概述

List 系列集合:添加的元素是有序、可重复、有索引

  • ArrayList、LinekdList:有序、可重复、有索引

Set 系列集合:添加的元素是无序、不重复、无索引

  • HashSet:无序、不重复、无索引
  • LinkedHashSet:有序、不重复、无索引
  • TreeSet:按照大小默认升序排序、不重复、无索引
Collection 常用方法

Collection 是单列集合的祖宗,它的方法是全部单列集合都会继承的

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();  // 多态写法
        // 1. 添加元素,添加成功返回true
        c.add("java1");
        c.add("java1");
        c.add("java2");
        c.add("java2");
        c.add("java3");
        System.out.println(c);  // [java1, java1, java2, java2, java3]

        // 2. 清空集合的元素
//      c.clear();

        // 3. 判断集合是否为空
        System.out.println(c.isEmpty());  // false

        // 4. 获取集合的大小
        System.out.println(c.size());  // 5

        // 5. 判断集合中是否包含某个元素
        System.out.println(c.contains("java1"));  // true

        // 6. 删除某个元素:如果有多个重复元素默认删除最前面的第一个
        System.out.println(c.remove("java1"));  // true
        System.out.println(c);  // [java1, java2, java2, java3]

        // 7. 把集合转换为数组
        Object[] arr = c.toArray();
        System.out.println(Arrays.toString(arr));  // [java1, java2, java2, java3]

        String[] arr2 = c.toArray(new String[c.size()]);
        System.out.println(Arrays.toString(arr));  // [java1, java2, java2, java3]

        // 8. 把一个集合的全部数据倒入到另一个集合中去
        Collection<String> c1 = new ArrayList<>();
        c1.add("java11");
        c1.add("java22");
        Collection<String> c2 = new ArrayList<>();
        c2.add("java33");
        c2.add("java44");
        c1.addAll(c2);
        System.out.println(c1);  // [java11, java22, java33, java44]
        System.out.println(c2);  // [java33, java44]
    }
}
Collection 的遍历方式

迭代器

迭代器是用来遍历集合的专用方式(数组没有迭代器),在 Java 中迭代器的代表是 Iterator

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("Jack");
        c.add("Peter");
        c.add("Tomato");
        c.add("wang");
        System.out.println(c);  // [Jack, Peter, Tomato, wang]

        // 使用迭代器遍历集合
        // 1. 从集合对象中获取迭代器对象
        Iterator<String> iter = c.iterator();
//        System.out.println(iter.next());  // Jack
//        System.out.println(iter.next());  // Peter
//        System.out.println(iter.next());  // Tomato
//        System.out.println(iter.next());  // wang
//        System.out.println(iter.hasNext());  // 判断当前迭代位置是否有元素存在 false
//        System.out.println(iter.next());  // 出现异常 NoSuchElementException

        // 2. 结合循环与迭代器,进行集合的遍历
        while (iter.hasNext()) {
            System.out.println(iter.next());
        }

    }
}

增强 for

"增强for"可以用来遍历集合或者数组,"增强for"遍历集合,本质就是迭代器遍历集合的简化写法

import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("Jack");
        c.add("Peter");
        c.add("Tomato");
        c.add("wang");
        System.out.println(c);  // [Jack, Peter, Tomato, wang]

        // 使用增强for遍历集合,或者遍历数组!!
        for (String ele : c) {
            System.out.println(ele);
        }

        int[] arr = {1, 2, 3, 4, 5};
        for (int num : arr) {
            System.out.println(num);
        }

    }
}

lambda 表达式

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;

public class Test {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("Jack");
        c.add("Peter");
        c.add("Tomato");
        c.add("wang");
        System.out.println(c);  // [Jack, Peter, Tomato, wang]

        // 方式一(未经过简化)
        c.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

        // 方式二(lambda简化版)
//      c.forEach(s -> System.out.println(s));
        c.forEach(System.out::println);
    }
}
在 Tcl 脚本中,`filter_collection` 命令用于对对象集合进行过滤,生成一个新的集合。该命令广泛应用于 EDA 工具(如 Synopsys 的 Design Compiler 或 Cadence 的 Innovus)中,以处理设计对象如单元、引脚、网络等。生成的集合可以通过 `foreach_in_collection` 命令进行遍历,该命令允许对集合中的每一个对象执行指定的 Tcl 脚本。 以下是一个典型的遍历流程: ```tcl # 获取所有引脚并创建一个集合 set all_pins [get_pins -hierarchical *] # 使用 filter_collection 过滤出名称中包含 "clk" 的引脚 set clock_pins [filter_collection $all_pins "name =~ *clk*"] # 遍历过滤后的集合并输出每个引脚的名称 foreach_in_collection pin $clock_pins { puts [get_object_name $pin] } ``` 在上述代码中,`foreach_in_collection` 用于遍历由 `filter_collection` 生成的集合 `clock_pins`。`pin` 是迭代变量,每次循环时会绑定到集合中的一个对象。`get_object_name` 函数用于获取当前对象的名称并输出[^3]。 也可以结合更复杂的过滤条件进行遍历,例如同时匹配名称和方向属性: ```tcl # 过滤出名称包含 "rst" 且方向为输入的引脚 set reset_input_pins [filter_collection $all_pins "name =~ *rst* && direction == in"] # 遍历并输出每个符合条件的引脚名称 foreach_in_collection pin $reset_input_pins { puts "Input reset pin: [get_object_name $pin]" } ``` 遍历集合是 Tcl 脚本中处理 EDA 工具对象模型的重要方式,尤其在自动化设计分析和优化任务中非常常见。通过结合 `filter_collection` 和 `foreach_in_collection`,可以实现对设计对象的高效筛选和批量处理[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值