1.集合分类
Collection:单列集合(每次存一个对象)
List:有存储顺序, 可重复
ArrayList:数组实现, 查找快, 增删慢
LinkedList:链表实现, 增删快, 查找慢
Vector:和ArrayList原理相同, 线程安全, 效率低
Set:无存储顺序, 不重复
HashSet:使用哈希算法, 只去重复, 效率高
TreeSet:可以指定排序算法, 用二叉树形式存储
LinkedHashSet:HashSet的子类, 实现原理相同, 但可以保留存储顺序
Map:键值对, 键唯一, 可以通过键查找值
HashMap:使用哈希算法对Key对象去重复, 效率高
TreeMap:可以指定排序算法, 用二叉树形式对Key对象进行存储
LinkedHashMap:HashMap的子类, 原理相同, 可以保留存储顺序
Hashtable:实现原理和HashMap相同, 线程安全, 效率低, 不允许空键和空值
2.List
2.1. List一种容器, 可以保存任意类型的对象, 长度可变.
2.2.常用的List
ArrayList:数组实现, 查找快
LinkedList:链表实现, 增删快
Vector:和ArrayList原理相同, 线程安全, 效率低
2.3.List中常用方法
add(Object)在List末尾添加一个元素
add(int,Object)在指定位置添加一个元素, 后面的元素全部向后移动
remove(int)删除指定位置上的元素
remove(Object)删除指定元素
set(int,Object) 将指定位置上的元素替换
get(int)获取指定位置上的元素
size()获取长度
iterator()获取迭代器
2.4.List的迭代
普通for循环, 由于List是有序的, 所以可以使用get(int)逐个获取, 定义循环即可遍历
Iterator迭代器(Iterator iter=list.iterator()),使用Iterator的hasNext()方法可以判断是否包含下一个元素, 使用next()方法可以获取下一个元素
增强for循环, 使用"for(元素类型 变量名 : 容器){ 循环体 }"形式进行遍历, 每次循环时变量会引用容器中的一个元素
Enumeration,Vector特有的方法( Enumeratione=v.elements()), 使用elements()获得Enumeration, hasMoreElements()方法判断是否包含下一个, nextElement()方法获取下一个
3 Set
a) 无序并且不重复
b) HashSet去重复:set集合由于是无序的,所以没有任何索引相关方法
c) 遍历迭代:Iterator<String>iter = set.iterator();
e) HashSet内部用的是哈希算法去重复,当存储对象的时候,先调用对象的hashCode方法计算一个哈希值,然后在集合中查找是否有哈希值相同的对象,如果没有哈希值相同的对象,那么直接存入,如果有哈希值相同的对象调用equals()方法比较,比较结果为true就不存,比较结果为false就存入
f) 当我们想HashSet中存储自定义类的对象时,如果没有重写hashCode()方法,那么将会调用Object类的hashCode(),得到当前对象的地址值,如果我们希望将属性相同的对象去重复,那么属性相同的对象必须要返回相同的哈希值
g) TreeSet是可以去重复严肃并且可以按照指定顺序排序,在使用TreeSet存储自定义类的对象时,需要实现Comparable接口(可比较的),然后重写compareTo方法,在方法中比较算法,返回正数,负数或者0
4 Map
1) Map<k,v>键,值
2) 要保证键的唯一性
3) 存储使用put方法
4) HashMap:使用哈希算法对Key对象去重复,效率高
5) TreeMap:(类似TreeSet)可以指定排序算法,用二叉树形式对Key对象进行存储
6) 遍历:
a) Set<Peseon> set=map.KeySet();得到键值
b) Set<Entry<Person,String>> Set = map.entrySet();Entry是一个键和一个值组成。
Entry对象.getKey();Entry对象.getValue();
7) LinkedHashMap:HashMap的子类,原理相同,可以保留存储顺序
8) Hashtable:实现原理和HashMap相同,线程安全,效率低,不允许空键和空值:map.put(null,null)不能这样写,要出空指针异常