首页 > 代码库 > J2SE基础:9.集合一

J2SE基础:9.集合一

1:集合:


集合的概念:数据容器(与数组类似)。容器比较适合装对象。


2:集合与数组的优缺点:


数组存取效率高,使用时要求容量大小固定;适合基本数据类型的存取;

集合存取效率上有一定的牺牲,集合容量大小可以根据实际需要改变,
提供丰富的存和取对象的方法,适合成为对象的“容器”




3:集合框架体系图




接口的图标

类的图标

继承的图标:实心箭头
实现的图标:虚线


4:集合框架的分类:



A:集合(SET)

B:列表(List)

C:键值对(Map)

D:队列(Queue)


Collection的方法




add(添加)

remove(删除)

size(大小)

clear(清空)

Iterator(迭代器)

toArray(转成数组)




A:集合SET


特点:(1)不重复(逻辑相等,equals);
     (2)可以加一个NULL元素。
 

   HashSet:


特点:(1):哈希算法实现,无序的。
     (2):不是线程同步的。

由于HashSet中对象是不重复的。因此要重写对象的equals方法。由于不重复,因此往集合中
加入对象时,要一个个的比较是否重复。效率比较低。

因此,往集合中加元素时,先比较对象的hashCode是否在集合存在。

如果不存在:直接添加

如果存在:再比较两个以象是否equals,如果equals(),对象重复,不添加。

  如果不equals(),对象不重复。




   LinkedHashSet


特点:(1):底层机制链表方式实现。
     (2):元素是有序的。(是指添加进去的元素有序,不是指对象之间的顺序)
     (3):不是线程同步的。
     (4):由于是用链表实现,因此增删改对象比较容易。查找比较慢。


   CopyOnWriteArraySet


特点:(1):底层机制数组方式实现。
     (2):元素是有序的。(是指添加进去的元素有序,不是指对象之间的顺序)
     (3):它是线程同步的。
     (4):由于是用数组实现,因此查找比较快。增删改比较慢。
     


线程同步与非线程同步:


线程同步:当多个线程同时访问一个资源时,只能有一个线程访问该资源。因此效率比较
         慢。但数据对于多个线程来说是同步的。

非线程同步:当多个线程同时访问一个资源时,多个线程都可以访问该资源。因此效率比较
           快,但会造成多个数据看到的数据不同步。
   

   TreeSet


特点:元素有序的(对象之间有序)