起飞的火箭
2016-01-31 09:30
采纳率: 25%
浏览 2.1k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • devmiao 2016-01-31 14: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。

    点赞 打赏 评论
  • 91program 2016-01-31 09:47

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

    点赞 打赏 评论
  • 91program 2016-01-31 09:49

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

    点赞 打赏 评论
  • qq_30796951 2016-01-31 09:49

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

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

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

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

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

    点赞 打赏 评论
  • Royal_lr 2016-01-31 09:50

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

    点赞 打赏 评论
  • 另一花生 2016-01-31 10:17
    点赞 打赏 评论
  • Evankaka 2016-01-31 11:00

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

    点赞 打赏 评论
  • lambda-fk 2016-01-31 14:41

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

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

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

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

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

    点赞 打赏 评论

相关推荐 更多相似问题