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
特点:元素有序的(对象之间有序)