您好,欢迎访问三七文档
精品WORD文档下载可编缉使用java集合总结篇一:Java集合类总结2Java中集合类用法总结Collection├List│├LinkedList│├ArrayList(异步,线程不安全,空间用完时自动增长原容量一半)│└Vector(同步,线程安全,空间用完时自动增长原容量一倍)│└Stack└Set├HashSet└TreeSetMap├Hashtable├HashMap├WeakHashMap└TreeMapMap接口:|+--WeakHashMap:以弱键实现的基于哈希表的Map。在精品WORD文档下载可编缉使用WeakHashMap中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除,因此,该类的行为与其他的Map实现有所不同。此实现不是同步的。|+--TreeMap:该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。此实现不是同步的。|+--HashMap:基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。(除了非同步和允许使用null之外,HashMap类与Hashtable大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现不是同步的。|+--SortedMap:进一步提供关于键的总体排序的Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的Comparator进行排序。对有序映射的collection视图(由entrySet、keyset和values方法返回)进行迭代时,此顺序就会反映出来。要采用此排序方式,还需要提供一些其精品WORD文档下载可编缉使用他操作(此接口是SortedSet的对应射)。Collection接口:|+--Set接口:一个不包含重复元素的collection。更正式地说,set不包含满足e1.equals(e2)的元素对e1和e2,并且最多包含一个null元素。正如其名称所暗示的,此接口模仿了数学上的set抽象。|||+--HashSet:此类实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。此类为基本操作提供了稳定性能,此实现不是同步的。|||+--LinkedHashSet:具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到set中的顺序(插入顺序)进行迭代。注意,插入顺序不受在set中重新插入的元素的影响。此实现不是同步的。|||+--TreeSet:基于TreeMap的NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建set时提供精品WORD文档下载可编缉使用的Comparator进行排序,具体取决于使用的构造方法。此实现为基本操作(add、remove和contains)提供受保证的log(n)时间开销。此实现不是同步的。|+--List接口:有序的collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。|+--ArrayList:List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。除了实现List接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于Vector类,除了此类是不同步的。)每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。此实现不是同步的。|+--LinkedList:List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。除了实现List接口外,LinkedList类还为在列表的开头及结尾get、remove精品WORD文档下载可编缉使用和insert元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。提供先进先出队列操作(FIFO)。此实现不是同步的。|+--Vector:Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector的大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作。此实现是同步的.1.Collection的功能下面这张表给出了Collection的所有功能,也就是你能用Set和List做什么事(不包括从Object自动继承过来的方法)。(List还有一些额外的功能。)Map不是继承Collection的,所以我们会区别对待。booleanadd(Object):确保容器能持有你传给它的那个参数。如果没有把它加进去,就返回false。(这是个“可选”的方法,本章稍后会再作解释。)booleanaddAll(Collection):加入参数Collection所含的所有元素。只要加了元素,就返回true。voidclear():清除容器所保存的所有元素。(“可选”)booleancontains(Object):如果容器持有参数Object,就返回true。booleancontainsAll(Collection):如果容器持有参数Collection所含的全部元素,就返回true。精品WORD文档下载可编缉使用booleanisEmpty():如果容器里面没有保存任何元素,就返回true。Iteratoriterator():返回一个可以在容器的各元素之间移动的Iterator。booleanremoveAll(Collection):删除容器里面所有参数Collection所包含的元素。只要删过东西,就返回true。(“可选”)booleanretainAll(Collection):只保存参数Collection所包括的元素(集合论中“交集”的概念)。如果发生过变化,则返回true。(“可选”)intsize():返回容器所含元素的数量。Object[]toArray():返回一个包含容器中所有元素的数组。Object[]toArray(Object[]a):返回一个包含容器中所有元素的数组,且这个数组不是普通的Object数组,它的类型应该同参数数组a的类型相同(要做类型转换)。注意,这里没有能进行随机访问的get()方法。这是因为Collection还包括Set。而Set有它自己的内部顺序(因此随即访问事毫无意义的)。所以如果你要检查Collection的元素,你就必须使用迭代器。2.List的功能List的基本用法事相当将但的。虽然绝大多数时候,你只是用add()加对象,用get()取对象,用iterator()获取这个序精品WORD文档下载可编缉使用列的Iterator,但List还有一些别的很有用的方法。实际上有两种List:擅长对元素进行随机访问的,较常用的ArrayList,和更强大的LinkedList。LinkedList不是为快速的随机访问而设计的,但是它却有一组更加通用的方法。Lisk(接口):List的最重要的特征就是有序;它会确保以一定的顺序保存元素。List在Collection的基础上添加了大量方法,使之能在序列中间插入和删除元素。(只对LinkedList推荐使用。)List可以制造ListIterator对象,你除了能用它在List的中间插入和删除元素之外,还能用它沿两个方法遍历List。ArrayList*:一个用数组实现的List。能进行快速的随机访问,但是往列表中间插入和删除元素的时候比较慢。ListIterator只能用在反向遍历ArrayList的场合,不要用它来插入和删除元素,因为相比LinkedList,在ArrayList里面用ListIterator的系统开销比较高。LinkedList:对顺序访问进行了优化。在List中间插入和删除元素的代价也不高。随机访问的速度相对较慢。(用ArrayList吧。)此外它还有addFirst(),addLast(),getFirst(),getLast(),removeFirst()和removeLast()等方法(这些方法,接口和基类均未定义),你能把它当成栈(stack),队列(queue)或双向队列(deque)来用。记住,容器只是一个存储对象的盒子。如果这个笑盒子能帮精品WORD文档下载可编缉使用你解决所有的问题,那你就用不着取管它事怎么实现的(在绝大多数情况下,这是使用对象的基本概念)。如果开发环境里面还有一些别的,会造成固定的性能开销的因素存在,那么ArrayList和LinkedList之间的性能差别就会变得不那么重要了。你只需要它们中的一个,你甚至可以想象有这样一种“完美”的抽象容器;它能根据用途,自动地切换其底层的实现。用LinkedList做一个栈“栈(stack)”有时也被称为“后进先出”(LIFO)的容器。就是说,最后一个被“压”进栈中的东西,会第一个“弹”出来。同其他Java容器一样,压进去和弹出来的东西都是Object,所以除非你只用Object的功能,否则就必须对弹起来的东西进行类型转换。LinkedList的方法能直接实现栈的功能,所以你完全可以不写Stack而直接使用LinkedList。如果你只想要栈的功能,那么继承就不太合适了,因为继承出来的是一个拥有LinkedList的所有方法的类。用LinkedList做一个队列队列(queue)是一个“先进先出”(FIFO)容器。也就是,你把一端把东西放进去,从另一端把东西取出来。所以你放东西的顺序也就是取东西的顺序。LinkedList有支持队列的功能的方法,所以它也能被当作Queue来用。精品WORD文档下载可编缉使用还能很轻易地用LinkedList做一个deque(双向队列)。它很像队列,只是你可以从任意一端添加和删除元素。Vector类Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。Stack类Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。3.Set的功能Set的接口就是Collection的,所以不像那两个List,它没有额外的功能。实际上Set确确实实就是一个Collection--只不过行为方式不同罢了。(这是继承和多态性的完美运用:表达不同地行为。)Set会拒绝持有多个具有相同值的对象的实例(对象的“值”又是由什么决定的呢?这个问题比较复杂,精品WORD文档下载可编缉使用我们以后会讲)。Set(接口):加入Set的每个元素必须是唯一的;否则,Set是不会把它加进篇二:【java总结】集合框架【java总结】集合框架Collection是集合框架层次结构中的根接口。Collection表示一组对象
本文标题:java集合总结
链接地址:https://www.777doc.com/doc-7877451 .html