1 集合框架
集合分为两组:单列集合与双列集合
Collection有两个重要的子接口List【有序型】,Set 【无序型】,它们的实现类就是单列集合
Map接口的实现类如常见的Hashtable,HashMap这个K-V键值对型就是双列集合
梳理出来的集合框架如下图所示,接口与实现类均在java.util包下:
2 Collection接口
2.1Collection接口常用方法
Collection接口的常用方法如下图所示:
根据单列框架图所知Collection接口没有直接的实现类,只能通过子接口List,Set实现。为了演示Collection接口的常用方法,将用List的常用实现类ArrayList来讲解方法的使用。
public class CollectionFramework {
public static void main(String[] args) {
//add 添加元素
List list=new ArrayList();
//等价于list.add(new Integer(1)),元素自动装箱
list.add(1);
list.add("name");
list.add(true);
System.out.println("list集合如下"+list);
//删除元素 remove()
//删除指定下标为0 即第一个元素。
list.remove(0);
//删除指定的元素
list.remove("name");
//判断元素是否存在 contains
System.out.println("list集合是否存在元素name:"+list.contains("name"));
//获得元素的个数 size()
System.out.println("list集合的个数为"+list.size());
//判断是否为空
System.out.println("list集合是否为空"+list.isEmpty());
//清空元素 clear
list.clear();
//判断集合是否为空等价于集合长度为0
System.out.println("list集合是否为空"+list.isEmpty());
System.out.println("list集合如下"+list);
//添加多个元素 addAll()
List list_1=new ArrayList();
list_1.add("book1");
list_1.add("book2");
list.addAll(list_1);
System.out.println("list集合如下"+list);
//查找多个元素是否都存在
list_1.add("book3");
System.out.println("多个元素是否都存在"+list.containsAll(list_1));
//删除多个元素 removeAll(list1),只要删除一个元素也算成功删除
System.out.println(list.removeAll(list_1));
System.out.println("list集合如下"+list);
}
}
显示结果如下:
2.1Collection集合的迭代
2.1.1使用迭代器
根据单列集合框架图所示,Collection接口继承了父接口Iterable,Iterable的一个重要方法为
Iterator<T> iterator();
即获得集合的迭代器对象,可以用来遍历集合的所有元素,但迭代器本身并不存放对象。
Collection的子接口都实现了该Iterable接口中方法,因此其子接口的所有实现类均能使用迭代器来遍历集合中的所有元素,仍然使用ArrayList类实现元素的遍历
public class IteratorCollection {
public static void main(String[] args) {
List list=new ArrayList();
list.add(1);
list.add("name");
list.add(true);
list.add(2);
list.add(new Date());
//获得集合的迭代器
Iterator iterator = list.iterator();
//hash next判断是否存在下一个元素
while (iterator.hasNext()){
//next() 存在下一个元素时,取出下一个元素。否则不存在时,调用next()抛出异常
//next() 每调用一次都会移动所指元素的位置
System.out.println(iterator.next());
}
System.out.println("再次遍历元素");
//再次遍历时,需要重置迭代器所指元素的位置
iterator = list.iterator();
while (iterator.hasNext()){
//next() 存在下一个元素时,取出下一个元素。否则不存在时,调用next()抛出异常
//next() 每调用一次都会移动所指元素的位置
System.out.println(iterator.next());
}
}
}
显示结果如下:
1
name
true
2
Fri Jun 17 18:51:37 CST 2022
再次遍历元素
1
name
true
2
Fri Jun 17 18:51:37 CST 2022
2.1.2增强for
增强for是简化版的迭代器,两者原理一致,用于遍历集合或数组
public static void main(String[] args) {
List list=new ArrayList();
list.add(1);
list.add("name");
list.add(true);
list.add(2);
list.add(new Date());
for (Object o : list) {
System.out.println(o);
}
}
2.1.3 普通for循环
public static void main(String[] args) {
List list=new ArrayList();
list.add(1);
list.add("name");
list.add(true);
list.add(2);
list.add(new Date());
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}