单例集合体系

单例集合的体系

Collection :单例集合的根接口
-------List :如果实现了List接口的集合类,具备的特点:有序,可重复
---------------| ArraryList 底层 是使用了Object数组实现的,特点: 查询速度快,增删慢。
---------------| LinkedList 底层是使用了链表数据结构实现 的, 特点: 查询速度慢,增删快。
---------------| Vector Vector的实现与ArrayList是一致,但是是线程安全 的,操作效率低。 jdk1.0的时候出现的
------------| Set 如果是实现了Set接口的集合类,具备的特点:无序,不可重复。
----------------| HashSet 底层是使用了一个哈希表支持的, 特点:存取速度快。
HashSet添加元素的原理:
往HashSet添加元素的时候,首先HashSet会调用元素的hashCOde方法得到元素的哈希码值,然后会经过一系列运算
就可以算出该元素在哈希表中的存储位置/

情况1:如果算出该元素的位置目前没有任何元素存储,那么该元素可以直接存储

情况2: 如果算出该元素的位置目前已经存有其他的元素,那么还会调用元素的equals方法与该位置的元素再比较一次。

如果equals方法返回的是false,那么该元素允许存储,如果euqlas方法返回的是true,那么该元素被视为重复元素,不允许存储。
------------------| TreeSet 底层是使用了红黑树(二叉树)数据结构实现的, 特点:会对元素进行排序存储。

TreeSet要注意的事项:
1. 往TreeSet添加元素的时候,如果元素本身具备自然顺序的特性,那么会根据元素自然顺序的特性进行排序存储。
2. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么元素所属的类必须要实现Comparable接口,把元素的比较规则定义
在CompareTo方法上。
3. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而且元素所属的类没有实现COmparable接口,那么必须要在创建
TreeSet对象的时候传入比较器。
4. 如果比较的方法(CompareTo 或者Compare )返回的是0的时候,那么该元素就被视为重复元素,不允许添加。

### Docker 中模式与多模式的区别及应用场景 #### 模式的概念及其特点 在软件设计中,模式是一种常见的设计模式,它确保某一个类仅有一个实,并提供全局访问点。对于 Docker 而言,虽然其本身并未直接定义“”这一概念,但在实际应用中可以通过某些方式实现类似的行为。如,在容器编排工具(如 Kubernetes 或 Docker Compose)中,通过配置文件指定某个服务运行一副本的方式可以视为一种模式的应用[^1]。 这种模式的主要特点是: - **唯一性**:在整个统生命周期内,该服务始终只有一个活跃的实。 - **资源共享**:多个客户端请求均指向同一个服务实,从而减少资源消耗并提升效率。 - **性能优化**:由于减少了重复创建和销毁操作,能够有效降低开销,特别是在高并发环境下表现尤为明显。 #### 多模式的概念及其特点 相对应于模式,“多”则允许同一类型的服务存在多个独立实。在 Docker 的上下文中表现为启动多个相同的容器镜像实来分担负载或者增强冗余度以保障业务连续性。比如在一个分布式架构里部署 Web 应用程序时通常会采用这种方式——即水平扩展技术。 此类方法具备如下特性: - **弹性伸缩能力**:依据实时流量动态调整工作节点数量;既可以在高峰期增加处理元又能在低谷期缩减规模节省成本。 - **容错机制加强**:即使部分服务器出现问题也不会影响整体服务质量因为还有其他备用选项可用。 #### 两者之间的区别对比表 | 特征/维度 | 模式 | 多模式 | |------------------|---------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------| | 实数目 | 整个应用程序范围内保持唯一的实 | 可拥有任意数量的不同实 | | 并发支持情况 | 对所有线程共享数据结构的操作必须同步保护以免引发竞争条件 | 各自维护自己的状态空间所以不存在上述顾虑 | | 初始化时机 | 提前加载至内存以便随时调用 | 按需触发 | | 使用场景举说明 | 数据库连接池管理器、日志记录设施等 | 微服务体系下的各个微服务模块 | #### 场景分析 ##### 模式适用场合 当希望保证特定功能逻辑在整个统中有且仅有一次执行路径的时候适合选用此方案。如: - 配置中心:集中存储各类参数设置供下游消费方读取更新而无需担心版本冲突等问题; - 缓存代理层:统一对外暴露接口屏蔽底层复杂细节同时兼顾高效检索需求; - 日志收集端口监听者角色承担起汇聚来自不同源头的消息职责进而持久化保存起来便于后续审计追踪之用等等情形皆可考虑引入设计理念加以解决[^3]。 ##### 多模式典型运用领域 而对于那些强调横向扩容潜力以及高度可靠性的任务来说,则更倾向于采纳多策略来进行规划布局。具体而言包括但不限于以下几个方面: - API网关集群建设旨在分流外部来访压力并通过健康检测剔除异常成员维持正常运转秩序; - 计算密集型作业分配给分布在多地数据中心里的计算引擎共同协作完成大规模科学运算挑战; - 存储阵列组建过程中为了满足海量非结构化资料存放诉求往往也会采取类似的思路构建庞大的物理设备集合体作为支撑底座[^2]。 ```python import docker client = docker.from_env() # 创建模式示 singleton_container = client.containers.run('nginx', detach=True, name='my-singleton-container') # 创建多模式示 replicated_containers = [] for i in range(3): # 假设我们需要三个副本 container_name = f'my-replica-{i}' replicated_containers.append(client.containers.run('nginx', detach=True, name=container_name)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值