Java集合的基本概括

                                                                        首先看一张<Thinking in Java>中的图


Java中的集合主要包括两大类, 一类是 Collection 另一类是 Map , 这样分类的原因很简单 Map 和 其他集合保存数据的方式有着本质的不同.下面也主要从这两大类介绍java中的集合. 


Collection

 List接口:

  • ArrayList是其一个实现子类, 正如其名字一样,一个像数组一样的容器,你可以简单的把它当做一个可以自动扩容的数组来使用,其特点是随机访问的效率较高.
  • LinkList 采用链表来维护内部的数据,其特点是随机插入和删除的效率较高,  在List中间插入元素是可行的,如果你需要经常这么做,应该考虑使用 LinkList.
  • List 按照添加元素的顺序来维护自身的数据.
  • List 的很多行为都是依赖于 equals 方法,如 retainAll, removeAll.

Set接口:

  • HashSet 是一个速度最快的实现子类,因为它不会去考虑你加入元素的相关顺序,采用的是一种比较复杂的散列算法来保存数据.
  • TreeSet 可以按照比较结果的升序方式保存对象,因为考虑了顺序的原因,获取元素的速度慢于 HashSet.
  • LinkedHashSet 可以按照添加的顺序保存对象,同时拥有和 HashSet 相同的速度.
  • Set不能保存重复元素.

Queue接口:

  • LinkedList 提供方法实现队列的行为, 它实现了 Queue 接口,<Thinking in java> 中说到, Queue在并发编程中特别重要,因为它可以安全的将对象从一个任务传输到另外一个任务.

LinkedList 提供实现 队列 行为的方法有

  • offer  插入一个元素到队尾.
  • peek 和 element 在不移除队头元素的情况下返回队头元素. peek 方法在队列为空时返回 null ,而 element会抛出异常.
  • pool 和 remove 方法移除并且返回队头元素,区别同上.

LinkedList 同样可以实现 的行为操作,如下面代码所示:


Map

Map 的实现子类和 Set 很类似,主要有如下几个:

  • HashMap 同 HashSet 一样,也是获取元素速度最快的实习子类, <Thinking in Java> 中说到: HashMap 要成为你默认选择,在你不需要考虑其他特性的情况下,因为它对速度进行了优化.
  • TreeMap 可以按照 键 的比较结果升序保存键.
  • LinkedHashMap 按照添加元素的顺序保存键,并且还拥有保留了HashMap的查询速度.

图片中为什么没有Vector? 

<Thinking in Java> 中说到: 新程序不应该使用过时的 Vector, Hashtable 和 Stack. 因此特地查看了官方对 Vector 的描述:

This class is equivalent to ArrayList with synchronized operations. This has a performance cost, and the synchronization is not necessarily meaningful to your application: synchronizing each call to get, for example, is not equivalent to synchronizing on the list and iterating over it (which is probably what you intended). If you do need very highly concurrent access, you should also consider CopyOnWriteArrayList.

集合工具类:

  • Arrays 提供了很多对数组操作的便利工具.
  • Collections 提供了对集合操作的便利工具,其中一个比较常用: addAll

未完待续....对集合的深入研究和理解.

猜你喜欢

转载自blog.csdn.net/DJH2717/article/details/81208152
今日推荐