Java容器Container学习记录(概念篇)

发布于:2022-12-06 ⋅ 阅读:(706) ⋅ 点赞:(0)

Java容器Container学习记录(概念篇)

1.容器Container的概念

容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,容器都会自动帮您做好。

容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。

2.Java内部的容器类

Java容器类包含ListArrayListVectormapHashTableHashMapHashset等。

Java的容器可以存储属性的对象类型,如Java中的异构容器,可以存储任何对象类型为其他类提供该对象

ArrayList

ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法 并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

Map接口

请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

HashMap

HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap 的容量成比例。

Collection接口

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。

List(interface):次序是List最重要的特点;它确保维护元素特定的顺序。ListCollection添加了许多方法,使得能够向List中间插入与移除元素;Set(interface):存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入SetObject必须定义equals()方法以确保对象的唯一性。SetCollection有完全一样的接口。Set接口不保证维护元素的次序

3.容器的主要功能:

1.增加对象:向容器对象中新增加一个存储对象。

2.删除对象:把容器删除一个已经存储的对象。

3.替换对象:把容器中一个已有的对象,替换为其他对象。

4.遍历容器中的对象:将容器中一个已有的对象,替换为其他对象。

5.检查指定对象是否在一个容器中:判断方法

6.取得容器中对象的个数:提供属性和方法返回存储的对象的个数。

7.取得容器中指定的对象。

4. Java中容器的类型:

1.按大小是否可变区分:

(1)不可变大小容器(固定容器)

只能储存一定个数对象的容器,一旦创建后,大小不能改变:数组

(2)可变大小容器:

容器的容量当增加对象时,容量自动变大,删除对象,容器自动变小,Arrylist容器

2.按存储对象时是否有顺序区分:

(1)有序容器:可以指定存储的单元(每个存储单元都有序号)如数组List容器。

(2)无序容器:容器的存储单元无序,散列模式,随机存储。如Set,Map都是无序容器。

3.按存储对象是否需要编码区别:编码称为key,对象称为value,俗称键-值对即key-value对。

(1)无编码容器:存储对象时,对象不需要提供编码。如数组,ListSet

(2)有编码容器:存储对象时,需要给对象一个编码(key),key必须唯一。如Map容器(查找对象时,需要提供key才能取得对象的值)。

4.按存储对象是否自动排序区分:

(1)无排序容器:数组,ListSet,部分Map容器。

(2)有排序容器:TreeMapTreeSet


网站公告

今日签到

点亮在社区的每一天
去签到