动态集合和静态集合的不同

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
    </ul>
    <script>
        var oUl=document.querySelector("ul");
        var aLi1=document.getElementsByTagName("li");//获取的是动态集合
        var aLi2=document.querySelectorAll("li");//获取的是静态集合,快照机制
        // 删除某个元素的写法:元素的父元素.removeChild(元素)
        // oUl.removeChild(aLi1[0]);

        // 用第一个获取ali的方法(aLi1)将所有的li全部删除
        // 问题:删不完,剩下2,4,6
        // 原因:动态集合获取的元素,会随着元素的变化变量也发生变化。即就是删除一个长度就会减少一个,同时假设全部删除,后面的元素会往前移。但静态集合就不会
        // for(var i=0;i<aLi1.length;i++){
        //     oUl.removeChild(aLi1[i]);
        // }
        for(var i=0;i<aLi2.length;i++){
            oUl.removeChild(aLi2[i]);
        }

        // 另一种解决办法
        var aLilength=aLi1.length;
        for(var i=0;i<aLilength;i++){
            oUl.removechild(aLi1[aLi1.length-1]);
        }
    </script>
</body>
</html>
### Java 集合框架中的集合静态集合 在Java中,集合是指一系列对象的容器,这些对象可以被存储、检索操作。Java集合框架位于`java.util`包中[^1]。 #### 动态集合的特点 动态集合允许在其生命周期内的任何时间点添加或移除元素,其大小不是固定的。例如,`ArrayList`继承了`AbstractList`并实现了`List`接口,作为一个数组队列提供了动态调整大小的能力以及相关的添加、删除、修改、遍历等功能[^4]。同样地,对于`Set`接口的不同实现类如`HashSet`、`LinkedHashSet`(它是`HashSet`的一个子类)、`TreeSet`也支持动态增删改查的操作[^2]。 #### 静态集合的概念 相比之下,“静态集合”并不是官方术语,在这里假设指的是通过工具类如`Collections`来创建不可变或者固定尺寸的集合实例的情况。这类集合一旦初始化完成就不能再改变其中的内容;如果尝试对其进行结构性修改,则会抛出异常。`Collections.unmodifiableCollection()`系列方法就是用来返回一个受保护视图的方法之一,该视图内部封装了一个原始可变集合,并阻止外界对其成员进行更改[^3]。 因此,主要区别在于: - **灵活性**:动态集合适用于需要频繁变更数据的应用场景;而静态集合更适合于那些希望确保某些特定时刻的数据状态不会发生变化的情形。 - **安全性**:由于无法对外界暴露修改权限,所以基于现有集合构建出来的只读版本能够有效防止意外篡改带来的风险。 ```java // 创建一个动态列表 List<String> dynamicList = new ArrayList<>(); dynamicList.add("Element"); // 将上述列表转换成不可变形式 List<String> staticList = Collections.unmodifiableList(dynamicList); try { staticList.add("Another Element"); // 这里将会引发UnsupportedOperationException } catch (Exception e) { System.out.println(e.getMessage()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值