Collection
方法
add(Object obj) 添加元素
addAll(Collection coll) 添加另一个集合
int size( ) 有效元素个数
void clear() 清空集合
boolean isEmpty() 是否为空
contains (Object obj) 是否为同一个对象
调用对应元素的equals方法
boolean remove() 移除元素
boolean removeAll(Collection coll) 移除交集
boolean retainAll(Collection coll) 求交集
调用对应元素的equals方法
遍历操作
迭代器
//arraylist为ArrayList集合
Iterator iterator = arraylist.iterator();
while(iterator.hasNext) {
System.out.println(iterator.next());
}
注意
每次调用iterator 都会返回一个新的 iterator 对象
初始指针处于第一个元素之前,使用 hasNext 判断下一个位置是否有元素。
调用next()方法,使得指针下移,并且返回当前元素。
List接口
List接口下有三个实现类,分别为:
ArrayList 主要实现类 ,线程不安全,效率高,底层为数组
LinkedList 对于频繁插入、删除操作,效率高,底层为双链表
Vector 旧版本,线程安全,效率低,底层为数组
ArrayList
jdk .7
创建ArrayList实例时,便创建长度为10的数组,容量不够,扩容1.5倍
jdk.8
当调用add()方法时,才创建数组。
目的:节省内存,延迟创建
常用方法
void add(int index , Object ele) index指定位置
boolean addAll(int index,Collection eles)
Object get(int index)
int indexOf(Object obj) 返回首次出现位置
remove
set(int index, Object obj)
List subList(int fromIndex , int toIndex) 返回fromIndex 到 toIndex 子集
Set接口
Set接口特点:无序,不可重复
主要有三个实现类:
HashSet 主要实现类,线程不安全,可以存null值
LinkedHashSet
TreeSet
HashSet
无序性,不等于随机性,HashSet存取顺序取决于 hash值
添加元素过程
添加元素,首先调用元素的hashCode() ,得到hash值,再通过某种算法得到底层数组索引值。
如果无元素,添加成功。
如果有元素,在调用元素的equals()方法,true 添加不成功。false 添加成功
自定义类
添加的数据为自定义类,自定义类需要重写hashCode() 、equals() 方法
LinkedHashSet:
在HashSet基础上,加上双链表,添加顺序便可知。
TreeSet
底层为红黑树,只能加入同类型数据,可理解为排序接口,有两种排序方法:
自然排序
定制排序
Map
Map 键值对 key-value
key 无序,不可重复 使用Set存储
value 无序,可重复 使用Collection存储
key + value 使用Entry数组存储 实际也为Set