------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
系统学习集合
一:集合的体系
Collection(单列集合)
List(有序,可重复)
ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
Set(无序,唯一)
HashSet
底层数据结构是哈希表。
哈希表依赖两个方法:hashCode()和equals()来保证唯一。
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
通过快捷键自动生成hashCode()和equals()即可
LinkedHashSet
底层数据结构由链表和哈希表组成。
由链表保证元素有序。
由哈希表保证元素唯一。
TreeSet
底层数据结构是红黑树。(是一种自平衡的二叉树)
如何保证元素唯一性呢?
根据比较的返回值是否是0来决定
如何保证元素的排序呢?
两种方式
自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
比较器排序(集合具备比较性)
让集合接收一个Comparator的实现类对象
Map(双列集合)
A:Map集合的数据结构仅仅针对键有效,与值无关。
B:存储的是键值对形式的元素,键唯一,值可重复。
HashMap
底层数据结构是哈希表。线程不安全,效率高
哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
自动生成hashCode()和equals()即可
LinkedHashMap
底层数据结构由链表和哈希表组成。
由链表保证元素有序。
由哈希表保证元素唯一。
Hashtable
底层数据结构是哈希表。线程安全,效率低
哈希表依赖两个方法:hashCode()和equals()
执行顺序:
首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值
是true:说明元素重复,不添加
是false:就直接添加到集合
否:就直接添加到集合
最终:
自动生成hashCode()和equals()即可
TreeMap
底层数据结构是红黑树。(是一种自平衡的二叉树)
如何保证元素唯一性呢?
根据比较的返回值是否是0来决定
如何保证元素的排序呢?
两种方式
自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
比较器排序(集合具备比较性)
让集合接收一个Comparator的实现类对象
二:到底使用那种集合
看需求。
是否是键值对象形式:
是:Map
键是否需要排序:
是:TreeMap
否:HashMap
不知道,就使用HashMap。
否:Collection
元素是否唯一:
是:Set
元素是否需要排序:
是:TreeSet
否:HashSet
不知道,就使用HashSet
否:List
要安全吗:
是:Vector(其实我们也不用它,后面我们讲解了多线程以后,我在给你回顾用谁)
否:ArrayList或者LinkedList
增删多:LinkedList
查询多:ArrayList
不知道,就使用ArrayList
不知道,就使用ArrayList
所以我们使用最多的就是HashMap、HashSet、ArrayList集合
3:集合的常见方法及遍历方式
Collection:
A:添加功能
boolean add(Object obj);添加一个元素
boolean addAll(Collection c);添加一个集合元素
B:删除功能
void clear();移除所有元素
boolean remove(Object o);移除一个元素
boolean removeAll(Collection c);移除一个集合里的所有元素
C:判断功能
boolean contains(Object o);判断集合中是否包含指定的元素
boolean containsAll(Collection c);判断集合中是否包含指定的集合
boolean isEmpty();判断集合是否为空。
D:获取功能
Iterator<E> iterator();迭代器,用来遍历。
E:长度功能
int size();获取元素的个数集合的长度
遍历:
增强for
迭代器
|--List
除了具备Collections的功能外还有自己的特有功能
获取功能
Object get(int index);获取指定位置的元素
遍历:
增强for
迭代器
普通for:size()和get()方法结合
|--Set
具备Collections的功能
遍历:
增强for
迭代器
Map:
A:添加功能
V put(K key,V value):添加元素。
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存储,就用值把以前的值替换掉,返回以前的值。
B:删除功能
void clear();移除所有的键值对元素,这个方法不常用。
V remove(Object key):根据键删除对应元素,并把对应的值返回。
C:判断功能
boolean containsKey(Object key):判断集合是否包含指定的键。
boolean containsValue(Object value);判断集合是否包含指定的值
boolean isEmpty();判断集合是否为空。
D:获取功能
Set<Map.Entry<K,V>> entryset();
V get(Object key);根据键获取值
Set<K> keySet();获取集合中所有的键的集合
Collection<V> value();获取集合中所有值的集合。
E:长度功能
int size();返回集合中的键值对的个数。
遍历:
根据键找值(相当于根据丈夫找妻子)
根据键值对对象分别找键和值(相当于根据结婚证找丈夫和妻子)