前言
为什么使用集合?
1)可以动态保存任意多个对象,使用较为方便
2)提供了一系列方便的操作对象的方法
3)使用集合添加、删除新元素的代码简洁明了
Collection接口
集合框架体系
1)集合主要是两组(单列集合、双列集合)
2)Collection接口有两个重要子接口List和Set,实现子类都是单列集合
3)Map接口的实现子类是双列集合,存在键值对K-V
Collection接口实现类的特点
1)collection实现子类可以存放多个元素,每个元素可以是Object
2)Collection接口没有直接的实现子类,通过它的子接口Set和List实现的
Collection接口的常用方法
1)add ---- 添加单个元素
2)remove ---- 删除指定元素
3)contains ---- 查找元素是否存在
4)size ---- 获取元素个数
5)isEmpty ---- 判断是否为空
6)clear ---- 清空
7)addAll ---- 添加多个元素
8)containsAll ---- 查找多个元素是否都存在
9)removeAll ---- 删除多个元素
Collection接口遍历元素的两种方式
方式一:使用Iterator(迭代器)
Iterator对象称为迭代器,用于遍历collection集合中的元素
所有实现了Collection接口的集合类都有一个Iterator()方法
用以返回一个实现了Iterator接口的对象,即返回一个迭代器
注意:Iterator本身并不存放对象
// 以 ArrayList为例
Collection arraylist = new ArrayList();
//加入元素
arraylist.add(1);
arraylist.add(2);
arraylist.add(3);
arraylist.add(4);
//得到arraylist集合的迭代器
Iterator it = arraylist.iterator();
// it.hasNext() 判断是否存在下一个元素
// 若存在返回true,否则返回false
while (it.hasNext()) {
//it.next() 指向下一个元素,并返回该元素
Object next = it.next();
System.out.println(next);
}
//注意:在调用next()方法前必须要调用hasNext()方法进行检测
// 若不调用,下一个元素不存在,直接调用next()方法
// 会抛出NoSuchElementException异常
方式二:使用增强for循环
// 以 ArrayList为例
Collection arraylist = new ArrayList();
//加入元素
arraylist.add(1);
arraylist.add(2);
arraylist.add(3);
arraylist.add(4);
//增强for
for (Object obj:arraylist ){
System.out.println(obj);
}
List接口
List接口是Collection接口的子接口
1)List集合类中元素有序,添加顺序与取出顺序一致、元素可重复
2)list集合中的每个元素都有其对应的顺序索引
List接口的常用方法
1)void add(int index,Object ele)
在index位置插入ele元素
2)boolean addAll(int index, Collection eles)
从index位置开始将eles中的所有元素添加进来
3)Object get(int index)
获取指定index位置的元素
4)int indexOf(Object obj)
返回obj在集合中首次出现的位置
5)int lastIndexOf(object obj)
返回obj在当前集合中末次出现的位置
6)Object remove(int index)
移除指定index位置的元素,并返回此元素
7)Object set(int index,Object ele)
设置指定index位置的元素为ele相当于是替换
List接口的三种遍历方式
方式一:使用Iterator(迭代器)
// 以 ArrayList为例
List list = new ArrayList();
//加入元素
list.add(1);
list.add(2);
list.add(3);
list.add(4);
//Iterator
Iterator it = list.iterator();
while(it.hasNext()){
Object next = it.next();
System.out.println(next);
}
方式二:使用增强for循环
// 以 ArrayList为例
List list = new ArrayList();
//加入元素
arraylist.add(1);
arraylist.add(2);
arraylist.add(3);
arraylist.add(4);
//增强for
for (Object obj:arraylist ){
System.out.println(obj);
}
方式三:使用普通for循环
// 以 ArrayList为例
List list = new ArrayList();
//加入元素
list.add(1);
list.add(2);
list.add(3);
list.add(4);
//for
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
Set接口
Set接口是Collection接口的子接口
1)无序(添加和取出顺序不一致),没有索引
2)不允许重复元素
Set接口的常用方法
1)add ---- 添加单个元素
2)remove ---- 删除指定元素
3)contains ---- 查找元素是否存在
4)size ---- 获取元素个数
5)isEmpty ---- 判断是否为空
6)clear ---- 清空
7)addAll ---- 添加多个元素
8)containsAll ---- 查找多个元素是否都存在
9)removeAll ---- 删除多个元素
10)toArray ---- 变为数组
11)hashCode ---- 哈希值
List接口的两种遍历方式
方式一:使用Iterator(迭代器)
//以HashSet为例
Set hset = new HashSet();
//加入元素
hset.add(1);
hset.add(2);
hset.add(3);
hset.add(4);
//Iterator
Iterator it = hset.iterator();
while(it.hasNext()){
Object next = it.next();
System.out.println(next);
}
方式二:使用增强for循环
//以HashSet为例
Set hset = new HashSet();
//加入元素
hset.add(1);
hset.add(2);
hset.add(3);
hset.add(4);
//增强for
for (Object obj:hset ){
System.out.println(obj);
}
// 注意:不能使用索引的方式来获取 ---- 没有普通for循环来获取值