Java容器Container学习记录(概念篇)
1.容器Container的概念
容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,容器都会自动帮您做好。
容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
2.Java内部的容器类
Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap、Hashset等。
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最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素;Set(interface):存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。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)无编码容器:存储对象时,对象不需要提供编码。如数组,List,Set
(2)有编码容器:存储对象时,需要给对象一个编码(key),key必须唯一。如Map容器(查找对象时,需要提供key才能取得对象的值)。
4.按存储对象是否自动排序区分:
(1)无排序容器:数组,List,Set,部分Map容器。
(2)有排序容器:TreeMap,TreeSet