容器总结

1.记住两张图(一张是接口图,一张是接口与实现类的图)及其特性。

2.注意: 本章提供的容器,可用来存放各种对象。当各种对象添加到容器中后,其类型会变为Object类型。

3、如何遍历与Collection接口相关的容器。
   1) 方法一: 通过新增的for循环实现遍历。
   2) 方法二: 凡是与Collection接口的容器均拥有一个 iterator()方法,该方法
      用来反馈一个Iterator接口的迭代器。通过此迭代器可以实现容器的遍历。

4.List接口的特性:
   1) 元素在位置上是有序的。即: 每一个元素拥有一个位置的索引号,该号从零开始。

2) 元素可以重复。即: 重复的元素可以在不同的位置上。

3) 它比父接口Collection多了一些与位置相关的操作方法。
   插入、删除某个位置上的元素、替换某个位置上的元素、获取某个位置上的元素等。

4) 它的常用实现类: LinkedList 和 ArrayList。

LinkedList采用链表的原理来管理所有的元素。
   因此,它在插入和删除时效率较高,而查找时效率较低。

ArrayList 采用队列的原理来管理所有的元素。
    因此,它在插入和删除时效率较低,而查找时效率较高。

1、Set接口的特性:
  1) 元素无序;

2) 元素不重复; 当添加重复的元素时会采用屏蔽技术屏蔽掉。

3) 它的常用实现类为: HashSet。

3) 判断元素相等依赖equals()方法。同时,它还依赖hashCode()方法。

注意: 在Java中,规定: 一个对象拥有一个哈希编码,该编码就是一个int型整数,它由系统自动产生。
   注意: 在Java中,规定: 相等的对象应该拥有相同的哈希编码。

结论: 当你的容器由 HashSet实现类所构建的且用来存放自定义类的对象时,则要求:
   该自定义类必须重写 equals()和hashCode()两个方法,为对象判断相等提供依据。

1、SortSet接口的特性:
 1) 元素有序(元素会按大小自动排序)。

2) 元素不重复。当添加重复的元素时会采用屏蔽技术屏蔽掉。

3) 它的实现类为: TreeSet。

2、TreeSet实现类的特性:
 1) 元素有序(元素会按大小自动排序)。

2) 元素不重复。当添加重复的元素时会采用屏蔽技术屏蔽掉。

3) 判断元素相等依赖equals()方法。但,实质上它依赖compareTo()方法。
 注意: 凡是能够自动排序的容器,均要求存放的元素必须是相同的类型。
 (即:不同种类的元素不可比较大小)

结论: 当容器由 TreeSet实现类所构建且用来存放自定义类的对象时,则要求:
 该自定义类必须实现Comparable接口,重写compareTo()方法,为对象比较
 大小提供依据。

注意: 在重写compareTo()方法时,要对对象的所有属性一一比较,确保在判断对象相等时
 与 equals()方法是一致。

时间: 2024-08-02 12:34:44

容器总结的相关文章

Docker学习笔记——Mongo Dockerfile及容器运行

1.创建项目目录mongo,在目录下上传下载的Mongodb安装文件及mongo.conf配置文件,创建Dockerfile文件,项目结构如下: mongo - Dockerfile - mongo.conf - mongodb-linux-x86_64-3.4.9.tgz - data - logs Dockerfile内容如下: # mongo # SOURCE_IMAGE FROM centos # MAINTAINER_INFO MAINTAINER bluemooder [email 

spring父子容器

通过HierarchicalBeanFactory接口,Spring的IoC容器可以建立父子层级关联的容器体系,子容器可以访问父容器中的Bean,但父容器不能访问子容器的Bean.在容器内,Bean的id必须是唯一的,但子容器可以拥有一个和父容器id相同的Bean.父子容器层级体系增强了Spring容器架构的扩展性和灵活性,因为第三方可以通过编程的方式,为一个已经存在的容器添加一个或多个特殊用途的子容器,以提供一些额外的功能. Spring使用父子容器实现了很多功能,比如在Spring MVC中

java持有对象【2】ArrayList容器续解

此为JDK API1.6.0对ArrayList的解释. ArrayList 使用java泛型创建类很复杂,但是应用预定义的泛型很简单.例如,要想定义用来保存Apple对象的ArrayList,可以声明ArrayList<Apple>,尖括号内为类型参数,(可以为多个).它指定了容器可以保存的类型. 通过使用泛型,可以在编译期防止将错误类型的对象放置到容器中. ArrayList向上转型为List. 应该注意到,在将元素从List中取出时,类型转换不是必须的了.因为List在调用get()时会

width:100%与绝对定位同时存在,偏移出父级容器

当父级容器内的子元素width设为100%,而子元素又有绝对定位时,子元素伸展超出父级容器,像下面 出现这种情况的原因,width:100%,这个百分之百是相对其定位父级而言的,其定位父级有多宽,这个子元素就有多宽,所以子元素跑到了父级容器外 html <div class="container"> <div class="content">好的</div> </div> css .container { positi

【Docker常见问题2】如何设置容器日志大小和保留个数

举例:当tomcat容器的运行,容器占用空间越来越大,约1个月就会超过2G,如何解决? 步骤1:查看容器日志大小:假设容器目录为/var/lib/docker/containers,那么执行如下命令 cd /var/lib/docker/containers  #进入默认容器空间目录 du -sh *            #统计文件大小2.4G  de92a5643f7ffb106f8abba21fc0f93996842917a52879153adc95a73312934a-json.log

Vector容器 和 iteration 迭代器

vector容器 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包含其他对象.一个容器中的所有对象都必须是同一种类型的. 使用vector之前,必须包含相应的头文件.#include <vector> using std::vector; vector是一个类模板(class template).模板允许程序员编写单个类或函数定义,这个类和函数定义可用于不同的数据类型上.

架构师养成--7.同步类容器和并发类容器

一.同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作.复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素).跳转(根据指定的顺序找到当前元素的下一个元素).以及条件运算.这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器设计的时候并没有考虑并发修改的问题. 同步类容器:如古老的Vector/HashTable.

vector容器用法详解

vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化. vector类常用的函数如下所示: 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元

【Effective Java】8、优先考虑类型安全的异构容器

有的时候我们一个容器只有一个类型或几个类型并不能满足我们的要求,比如set中存放的元素类型都是同一种,map也就指定的两种 这里我们可以将键进行参数化,而不是将容器参数化,也就是我们可以给容器传一个键的类型,然后value用来放对应的实例,这样就可以存放多个不同的类型了 如: package cn.xf.cp.ch02.item29; import java.util.HashMap; import java.util.Map; public class ManyTypeClass { //一个

stl容器区别: vector list deque set map及底层实现

在STL中基本容器有: vector.list.deque.set.map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set :集合, 用来判断某一个元素是不是在一个组里面,使用的比较少 map :映射,相当于字典 ,把一个值映射成另一个值,如果想创建字典的话使用它好了 底层采用的是树型结构,多数使用平衡二叉树实现 ,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入值的时候,会重新构成底层的平衡二叉树,效率有一定影响. vector.list.dequ