2 liming1xuri liming1xuri 于 2016.01.31 17:30 提问

JAVA中什么是容器?什么是集合?求大神指导

容器是什么?跟接口是什么关系?集合又是什么?求大神帮忙??????

8个回答

devmiao
devmiao   Ds   Rxr 2016.01.31 22:45
已采纳

Java集合容器主要有以下几类:
1,内置容器:数组
2,list容器:Vetor,Stack,ArrayList,LinkedList,
CopyOnWriteArrayList(1.5),AttributeList(1.5),RoleList(1.5),RoleUnresolvedList(1.5),
ConcurrentLinkedQueue(1.5),ArrayBlockingQueue(1.5),LinkedBlockingQueue(1.5),
PriorityQueue(1.5),PriorityBlockingQueue(1.5),SynchronousQueue(1.5)
3,set容器:HashSet(1.2),LinkedHashSet(1.4),TreeSet(1.2),
CopyOnWriteArraySet(1.5),EnumSet(1.5),JobStateReasons。
4,map容器:Hashtable,HashMap(1.2),TreeMap(1.2),LinkedHashMap(1.4),WeakHashMap(1.2),
IdentityHashMap(1.4),ConcurrentMap(1.5),concurrentHashMap(1.5)。
注意:Vector,Stack,Hashtable是Java1.2前的容器。
虽然在Java2之前,Java是没有完整的集合框架的。它只有一些简单的可以自扩展的容器类。
但是在Java2后他们还是被融入到了集合框架的,不过只是历史遗留而已。它们和1.2前应该还是有些变化的,虽然本质没什么变化。
Set接口继承于Collection,但不允许重复,使用自己内部的一个排列机制。
List接口继承Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。
Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。
一、Java1.2之前的容器类库
其实在Java2之前,Java是没有完整的集合框架的。它只有一些简单的可以自扩展的容器类,比如Vector,Stack,Hashtable等。
Java1容器类库设计的一个重大失误是竟然没有对容器进行排序的工具。比如你想让Vector容器中的对象按字典顺序进行排序,你就要自己实现。
1.1、Vector
java.util.Vector中包含的元素可以通过一个整型的索引值取得,它的大小可以在添加或移除元素时自动增加或缩小。Vector的操作很简单,通过addElement()加入一个对象,用elementAt()取出它,还可以查询当前所保存的对象的个数size();
另外还有一个Enumeration类提供了连续操作Vector中元素的方法,这可以通过Vector中的elements()方法来获取一个Enumeration类的对象,
可以用一个While循环来遍历其中的元素。用hasMoreElements()检查其中是否还有更多的元素。
用nextElement()获得下一个元素。Enumeration的用意在于使你能完全不用理会你要遍历的容器的基础结构,只关注你的遍历方法,
这也就使得遍历方法的重用成为可能。由于这种思想的强大功能,所以在Java2中被保留下来,不过具体实现,方法名和内部算法都改变了,
这就是Java2中的Iterator以及ListIterator类。然而Enumeration的功能却十分有限,比如只能朝一个方向进行,只能读取而不能更改等。
更多内容请参考《Vector》
1.2、Stack
java.util.Stack最常用的操作便是压入和弹出,最后压入的元素最先被弹出。它遵循后进先出(LIFO)原则。
在Java中Stack的的用法也很简单,有push()压入一个元素,用pop()弹出一个元素。
更多内容请参考《Stack容器》
1.3、Hashtable
Hashtable与Java2中的Map类似,可以看成一种关联或映射数组,可以将两个毫无关系的对象相关联。
它的基本目标是实现两个对象之间进行关联。
更多内容请参考《Hashtable》
二、Java2中的容器类库
自Java1.2之后Java版本统称为Java2,Java2中的容器类库才可以说是一种真正意义上的集合框架的实现。
基本完全重新设计,但是又对Java1中的一些容器类库在新的设计上进行了保留,这主要是为了向下兼容的目的,
当用 Java2开发程序时,应尽量避免使用它们,Java2的集合框架已经完全可以满足你的需求。
在Java1中容器类库是同步化的,而 Java2中的容器类库都是非同步化,这可能是对执行效率进行考虑的结果。
Java2中的集合框架提供了一套设计优良的接口和类,使程序员操作成批的数据或对象元素极为方便。
这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结构中熟知的。例如Maps,Sets,Lists,Arrays等。
并且Java用面向对象的设计对这些数据结构和算法进行了封装,这就极大的减化了程序员编程时的负担。
程序员也可以以这个集合框架为基础,定义更高级别的数据抽象,比如栈、队列和线程安全的集合等,从而满足自己的需要。
Java2的集合框架,抽其核心,主要有三类:List(包括List,Queue,BlockingQueue)、Set和Map。List和Set继承了Collection,而Map则独成一体。
初看上去可能会对Map独成一体感到不解,它为什么不也继承Collection呢?但是这种设计是合理的。
一个Map提供了通过Key对Map中存储的Value进行访问,也就是说它操作的都是成对的对象元素,比如put()和get()方法,
而这是一个Set或List 所不就具备的。当然在需要时,你可以由keySet()方法或values()方法从一个Map中得到键的Set集或值的Collection集。
集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法, Arrays则是对一个数组进行类似的操作。
2.1、Collection
Collection接口提供了一组操作成批对象的方法。(它只是个接口)
它提供了基本操作如添加、删除。它也支持查询操作如是否为空isEmpty()方法等。
为了支持对Collection进行独立操作,Java的集合框架给出了一个Iterator,它使得你可以泛型操作一个Collection,
而不需知道这个 Collection的具体实现类型是什么。它的功能与Java1中的Enumeration类似,只是更易掌握和使用,功能也更强大。
在建立集合框架时,Sun的开发团队考虑到需要提供一些灵活的接口,用来操作成批的元素,又为了设计的简便,
就把那些对集合进行可选操作的方法与基本方法放到了一起。因为一个接口的实现者必须提供对接口中定义的所有方法的实现,
这就需要一种途径让调用者知道它正在调用 的可选方法当前不支持。最后开发团队选择使用一种信号,
也即抛出一种不支持操作例外(UnsupportedOperationException),如果你在使用一个Collection中遇到一个上述的例外,
那就意味着你的操作失败,比如你对一个只读Collection添加一个元素时,你就会得到一个不支持操作例外。
在你实现一个集合接口时,你可以很容易的在你不想让用户使用的方法中抛出UnsupportOperationException来告诉使用者这个方法当前没有实现,
UnsupportOperationException是RuntimeException的一个扩展。
另外Java2的容器类库还有一种Fail fast的机制。比如你正在用一个Iterator遍历一个容器中的对象,
这时另外一个线程或进程对那个容器进行了修改,那么再用next()方法时可能会有灾难性的后果,
而这是你不愿看到的,这时就会引发一个ConcurrentModificationException例外。
这就是 fail-fast。

MOONCOM
MOONCOM 能不能别粘啊,毫无重点
接近 2 年之前 回复
devmiao
devmiao 回复liming1xuri: 不是一个概念哦,List容器说的是基类,List接口只是接口约定,没有办法实例化的哦
接近 2 年之前 回复
liming1xuri
liming1xuri List容器和List接口是一个概念吗?它们有什么区别呢
接近 2 年之前 回复
qq_30796951
qq_30796951   2016.01.31 17:49

容器只是一个概念。collection容器 最大的单值父接口 他有两个子接口List和set

Map最大的双值父接口 有两个直接子类HashMap和HashTable

两者区别就是 collection的目的是输出。Map的目的是查找

还有一个重要的是集合的输出Iterator、List Iterator、Enumeration、foreach

两者如果细分的话、又有一些东西要说。
这个笔者自己看看文档 看看项目源码 多敲敲电脑自然就会熟悉的。

Evankaka
Evankaka   Ds   Rxr 2016.01.31 19:00

Java集合与框架总结与学习http://blog.csdn.net/evankaka/article/details/43410013
这是笔者以前整理的,你可以参考下

Royal_lr
Royal_lr   Ds   Rxr 2016.01.31 17:50

容器太广泛了,,collection就是容器

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2016.01.31 18:17
fk002008
fk002008   2016.01.31 22:41

容器是一个抽象概念,范围很广

比如 web容器,Servlet容器 ,Java容器类

本质概念是可以提供一个环境,它可以管理容器内部对象的生命周期以及对象之间的依赖关系。

使用java的容器类只是其中很小的一个概念,比如容器管理内部对象的生命周期

集合只是java容器类中的一支而已,是一个框架体系

91program
91program   Ds   Rxr 2016.01.31 17:49

建议你BaiDu 查找:java 容器 接口,会有很多文章说明的。

91program
91program   Ds   Rxr 2016.01.31 17:47

Java中提供了丰富的数据容器以满足程序员多样化的需求。
JAVA的容器---List,Map,Set
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
!其中的Vector和Stack类现在已经极少使用。

liming1xuri
liming1xuri List容器和List接口是一个概念吗?如果不是那List容器是什么?与List接口有什么区别?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!