Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
什么是集合框架
那么有了集合的概念,什么是集合框架呢?集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
接口:即表示集合的
抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。
实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的
数据结构。
算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是
多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。事实上,算法是可复用的函数。如果你学过C++,那C++中的标准模版库(STL)你应该不陌生,它是众所周知的集合框架的绝好例子。
数组
数组与其它
容器的区别体现在三个方面:效率,类型识别以及可以持有primitives。
数组是
Java提供的,能随机存储和访问
reference序列的诸多方法中的,最高效的一种。
数组是一个简单的线性序列,所有它可以快速的访问其中的元素。但是速度是有代价的;当你创建了一个
数组之后,它的容量就固定了,而且在其生命周期里不能改变。也许你会提议先创建一个
数组,等到快不够用的时候,再创建一个新的,然后将旧的数组里的
reference全部导到新的里面。其实(我们以后会讲的)
ArrayList就是这么做的。但是这种灵活性所带来的开销,使得ArrayList的效率比起
数组有了明显下降。
还有一些
泛型
容器类包括
List,
Set和
Map。他们处理对象的时候就好像这些对象都没有自己的具体类型一样。也就是说,
容器将它所含的元素都看成是(Java中所有类的根类)Object的。这样你只需要建一种
容器,就能把所有类型的对象全都放进去。从这个角度来看,这种作法很不错(只是苦了primitive。如果是
常量,你还可以用Java的primitive的Wrapper类;如果是
变量,那就只能放在你自己的类里了)。与其他
泛型
容器相比,这里体现
数组的第二个优势:创建数组的时候,你也同时指明了它所持有的对象的类型(这又引出了第三点--数组可以持有primitives,而容器却不行)。也就是说,它会在编译的时候作类型检查,从而防止你插入错误类型的对象,或者是在提取对象的时候把对象的类型给搞错了。Java在编译和运行时都能阻止你将一个不恰当的消息传给对象。所有这并不是说使用
容器就有什么危险,只是如果
编译器能够帮你指定,那么程序运行会更快,最终用户也会较少收到程序运行异常的骚扰。
不管你用的是那种类型的
数组,数组的
标识符实际上都是一个“创建在堆(heap)里的实实在在的对象的”
reference。实际上是那个对象持有其他对象的
reference。你即可以用
数组的初始化语句,隐含地创建这个对象,也可以用new表达式,明确地创建这个对象,只读的length属性能告诉你数组能存储多少元素。它是
数组对象的一部分(实际上也是你唯一能访问的属性或方法)。‘[]’语法是另一条访问
数组对象的途径。
你没法知道
数组里面究竟放了多少元素,因为length只是告诉你数组能放多少元素,也就是说是数组对象的容量,而不是它真正已经持有的元素的数量。但是,创建
数组对象的时候,它所持有的
reference都会被自动地初始化为null,所以你可以通过检查数组的某个“槽位”是否为null,来判断它是否持有对象。以此类推,primitive的
数组,会自动来数字初始化为零,字符初始化为(char)0,boolean初始化为false。
以上内容 来自 百度百科。