一、
Collections:它的出现给集合操作提供了更多的功能。这个类不需要创建对象,内部提供的都是静态方法。
Collection:单列集合
|--List 有序,可重复
|--ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
|--Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
|--LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
|--Set 无序,唯一
|--HashSet 底层数据结构是哈希表,HashCode()和equals方法 |--TreeSet 底层数据结构是二叉树(红黑树)
Comparable(自然排序) compareTo()
Comparator(比较器排序) compare()
Map集合
|--Hashtable:底层是哈希表数据结构,是线程同步的。不可以存储null键,null值。
|--HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable.
|--TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。
二、Map集合框架:Map<K,V>
1、Collection集合是单列集合
Map是双列集合,又叫映射。有键和值。都是引用类型
2、特点:键是唯一,值可以重复
3、Api:
键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
4、功能:
A:添加功能:
V put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
当第一添加该键的时候,返回null
如果该键不是第一次出现,使用新值替换旧值,并返回旧值。
void putAll(Map<K,V> m)
从指定映射中将所有映射关系复制到此(this)映射中(可选操作)。
B:删除功能:
void clear() 从此映射中移除所有映射关系(可选操作)。
V remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
C:获取功能:
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。
V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
Set<K> keySet()
返回此映射中包含的键的 Set 视图。
int size()
返回此映射中的键-值映射关系数。
Collection<V> values()
返回此映射中包含的值的 Collection 视图
D:判断功能:
boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
boolean isEmpty()
如果此映射未包含键-值映射关系,则返回 true。
三、Map集合的遍历:
1、方式一:使用keySet和get方法
方式二:使用Set<Map.Entry<K,V>> entrySet()
使用集合的技巧:
看到Array就是数组结构,有角标,查询速度很快。
看到link就是链表结构:增删速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();
看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到该结构的中的元素必须覆盖hashCode,equals方法。
看到tree就是二叉树,就要想到排序,就想要用到比较。
比较的两种方式:
一个是Comparable:覆盖compareTo方法;
一个是Comparator:覆盖compare方法。
LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有存入顺序和取出顺序一致,保证哈希表有序。
集合什么时候用?
当存储的是一个元素时,就用Collection。当存储对象之间存在着映射关系时,就使用Map集合。
保证唯一,就用Set。
不保证唯一,就用List。
list中:如果要安全就用vector
不要安全,查询多,用ArrayList,增删多用LinkedList
什么都不懂,就用ArrayList