集合总结

阅读更多
一 ,java集合框架概览。


集合总结_第1张图片
 一,简述:
1. Collection接口
(1) Set接口
常用的实现类有:HashSet、TreeSet
(2) List接口
常用的实现类有:ArrayList、LinkedList、Vector
(3) Map接口
常用的实现类有:HashMap、TreeMap

 二,常用实现类。

 List:集合中的元素有序,元素值可重复。

 List 有两个常用的实现类,ArrayList和LinkedList

 

1,ArrayList:长度可变的的数组

(1)数据结构:一个长度可变的数据

(2)特点:查找快,增删改速度相对较慢。

        当调用默认构造方法创建ArrayList对象的时候,默认会创建一个长度为10的数组。

        当达到数组长度上限的时候,会1.5倍的增长长度

 

 

2,LinkedList

(1)数据结构:双向链表

(2)特点:增删改速度较快,查询的速度较慢。

 

Set:集合中的元素无序,元素不可重复;

3,HashSet

(1)数据结构:哈希表(用HashMap中的key实现的)

(2)特点:不能出现“重复”元素,集合中的没有顺序。

         允许出现null,但是只能出现一次。为了HashSet可以正常工作,放入其中的元素需要重写 hashCode 和equals方法

         因为结合中的元素不能重复,当添加一个元素的时候会先判断hashcode值是否相同(hascode算出的是哈希表中的索引,这个索引下可能会有多个元素)

         ,然后在调用equals逐个进行比较(不了解哈希表的人 可以baidu/google)

         这种比较方式是高效的。如果仅仅用equals的话,当数据很多的时候逐个比较起来会很低效。

 

4,TreeSet

(1)数据结构:红黑树,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点(利用TreeMap中的Key实现的)。

(2)特点:不可重复,但是有序。能对集合中的对象进行排序,有两种排序的方式

         第一,集合中的元素需要实现Comparable接口。内部会调用compareTo()方法进行比较

         第二,在创建TreeSet的时候在构造函数中传入一个比较器Comparator。集合中的元素就会按照比较器中规定的方式进行排序(这个方式是优先执行)

 

Map key-value一 一 对 应。

Map 常见的实现类 HashMap TreeMap。(key的特点 已经在上面的Set中说过了)

 5,HashMap

(1)数据结构:用哈希表实现的map结构,存储形式都是键值对

(2)特点:key不能重复,无序。 value 可以重复 ,允许 null key null value

 

6,TreeMap

(1)数据结构:用红黑树实现的map结构,存储形式都是键值对

(2)特点:key有序,不可重复。value可以重复

 

7,vector

 (1)数据结构:数组

 (2)特点:线程安全,如果达到数组长度上限,2倍增长,因为是线程安全的所以效率低于ArrayList

 

8,HashTable

 (1)数据结构:哈希表实现的map结构

 (2)特点:线程安全,所以效率HashMap 不允许出现空 key value

 

三,使用集合类的一些技巧

      1,如果使用到堆栈,队列,首先应该考虑List。如果涉及大量的 增加 删除 操作应该考虑 LinkedList

如果涉及到 大量的随机访问 应该考虑 ArrayList ,另外Arraylist 默认初始化一个10长度的数组,

增长倍数是1.5倍,所以如果要给ArrayList添加大量数据的时候应该 初始化一个较大的 Arraylist

或者调用 ensureCapacity(int minCapacity) 增加 ArrayLisy的长度。在一些主球效率的

程序中可以用数组去代替ArrayLisy,因为使用数组(Array)避免了同步、额外的方法调用和不必要的

重新分配空间的操作。

 

     2,单线程中使用 非同步类的 效率要高 LinkedList、ArrayList、HashSet、TreeSet、HashMap、            TreeMap 多线程中 应该考虑的是“并发容器” 而不是“同步容器” 并发容器有:ConcurrentHashMap

 CopyOnWriteArrayList 等等 性能要高于 同步容器 Vector 和 HashTable

 

     3,返回值类型尽量是接口,为了 如果需要更改 数据结构,例如把数据结构 ArrayList 更改为

LinkedList 的时候 调用端,也就是客户端代码不用改变。

 

     4,注意集合中的一些方法 remove(Object obj)、indexOf(Object obj)、contains(Object obj)

会遍历集合 调用 equals 方法。如果集合很大,效率会比较低。

 

     5,在操作底层为哈希表的集合的时候,注意合理重写 equals 和 hashCode方法

 

     6,注意 map 中put (key,value) 一个元素的时候 如果 put的key已经“存在” value 新值 替换旧值,

并且把旧值返回。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

  • 集合总结_第2张图片
  • 大小: 102.9 KB
  • 查看图片附件

你可能感兴趣的:(集合,总结,java,集合框架)