目录
TreeSet:
元素唯一,且元素的顺序可以按照某种规则进行排序
排序的方式有两种:
自然排序
比较器排序
TreeSet的两个特点:排序和唯一
TreeSet集合存储自定义对象并保证排序和唯一
原理:是根据比较的结果是否是0来决定的
排序:
1、自然排序(传入的数据接口具备实现了Comparable接口)
2、比较器排序
在创建集合的时候,调用带参数的构造方法,这个参数是实现了Comparator接口的子类对象
如果没有说明排序规则,自然排序,从大到小进行排序
注意:成员变量的值都相同的情况下算唯一的,就是同一个元素
TreeSet是如何保证元素的排序和唯一性的
底层数据结构是红黑树(红黑树是一种自平衡的二叉树)
Collection(接口)
--List(接口) 元素有序,不唯一
List相关集合有三种遍历方式:
1、结合size()和get()方法有普通for循环
2、迭代器遍历方式
3、增强for循环
--ArrayList
底层是数组,查询快,增删慢
线程不安全,效率高
--Vector
底层是数组,查询快,增删慢
线程是安全的,效率低
--LinkedList
--底层是链表,查询慢,增删快
线程是不安全的,效率高
--Set(接口) 元素唯一,无序
Set相关集合有三种遍历方式:
1、迭代器方式遍历
2、增强for循环
--HashSet
底层依赖哈希表,依赖hashCode()和equals()方法来保证元素唯一的
--LinkedHashSet
底层依赖哈希表和链表,哈希表保证元素唯一,链表保证元素有序。
--TreeSet
底层是红黑树(自平衡二叉树)
排序依赖自然排序和比较器排序。
这么多集合,开发中使用谁呢?
1、需不需要查询快
2、需不需增删快
3、需不需线程安全
如果说你实在不知道用什么,开发中也没有明确规定以上需求,你就用ArrayList
Map接口概述
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,值可以重复,Collection的子体系Set是唯一的
Map集合的数据结构值针对键有效,跟值无关
Collection集合的数据结构是针对元素有效
Map接口成员方法
V put(K key,V value) 将指定的值与该映射中的指定键相关联,两次插入同一个key的映射的时候,返回的是该key上一个映射中对应的值
V remove(Object key) 从该地图中删除一个键的映射,根据key移除,返回的是映射中对应值
void clear() 从该地图中删除所有的映射
boolean containsKey(Object key) 判断集合中是否包含某个键,如果包含返回true,如果不包含返回false
boolean containsValue(Object value) 判断集合中是否包含某个内容,如果包含返回true,如果不包含返回false
boolean isEmpty() 是否为空值
int size() 返回此Map中键值映射的数量
V get(Object key) 返回到指定键所映射的值,或null如果此映射包含该键的映射
Set keySet() 返回此地图中包含的键的Set视图
Collection values() 返回此地图中包含的值的Collection
Set>entrySet() 返回此地图中包含的映射的Set视图
HashMap类
键是哈希表结构,可以保证键的唯一性
LinkedHashMap类
Map接口的哈希表和链接列表实现,具有可预知的迭代顺序
哈希表保证唯一性,保证的是Key的唯一性
链表保证有序,保证的是键的有序(存储和取出顺序一致)