Java集合(一)
前言
1、集合主要分两组(单例集合,双列集合)
2、Collection接口有俩个重要的子接口 List Set ,他们的实现子类都是单例集合(都是存放的单个元素)
3、Map接口的实现子类 HashMap、TreeMap、Hashtable、LinkedHashMap,他们都是双例集合(都是存放的 K V 值)
4、看下面类图
提示:以下是本篇文章正文内容,下面案例可供参考
一、类图
1、Collection
2、Map
3、单例集合--------双例集合
二、Collection接口和常用方法
2.1常用方法
public class CollectionMethod {
public static void main(String[] args) {
//Collection接口和常用方法
List list = new ArrayList();
//1、add:添加单个元素(只要是Object子类对象都可以接收)
list.add("wxd");
list.add(23);//list.add(new Integer(10))
list.add(true);
System.out.println("1、add:添加单个元素(只要是Object子类对象都可以接收)-------list = " + list);
System.out.println();
//2、remove:删除指定元素
list.remove(0);//删除第一个元素
list.remove(new Integer(23));//指定删除某个元素 因为里面存的是对象,所以需要传参 new Integer(23)来删除list 里的23
System.out.println("2、remove:删除指定元素(删除了索引为零(也就是第一位的wxd)、删除了23)-------list = " + list);
System.out.println();
//3、contains:查找元素是否存在 存在返回
System.out.println("3、contains:查找元素是否存在(查找参数为:wxd)---存在返回true 反之为false------" + list.contains("wxd"));
System.out.println();
//4、size:获取元素个数
System.out.println("4、size:获取list元素个数-----" + list.size());
System.out.println();
//5、isEmpty:判断是否为空
System.out.println("5、isEmpty:判断是否为空---是为true 否 false------" + list.isEmpty());
System.out.println();
//6、clear:清空
list.clear();
System.out.println("6、clear:清空-------list:" + list);
System.out.println("isEmpty:清空之后、判断list是否为空---是为true 否 false------" + list.isEmpty());
System.out.println();
//7、addAll:添加多个元素
ArrayList list2 = new ArrayList<>();
list2.add("奥特曼");
list2.add("铁甲小宝");
list2.add("铠甲勇士");
list.addAll(list2);
System.out.println("7、addAll:添加多个元素(list2【奥特曼,铁甲小宝,铠甲勇士】)------list:" + list);
System.out.println();
//8、containsAll:查找多个元素是否都存在
System.out.println("8、containsAll:查找多个元素(list2【奥特曼,铁甲小宝,铠甲勇士】)是否都存在-----" + list.containsAll(list2));
System.out.println();
//9、removeAll:删除多个元素
list.add("小鲤鱼历险记");
System.out.println("list=" + list);
System.out.println("list2=" + list2);
list.removeAll(list2);
System.out.println("9、removeAll:删除多个元素(list2【奥特曼,铁甲小宝,铠甲勇士】)-------list=" + list);
}
}
运行结果
2.2、Collection接口遍历元素方式—使用Iterator(迭代器)
这里我们看到Collection接口还继承了Iterable接口 看下Iterable源码👇
只要是实现了Collection接口的子类都可以获取到一个迭代器。
主要遍历Collection集合中的元素。
Iterator仅用于遍历集合,本身并不存放数据。
2.2.1、 执行原理
public class CollectionIterator {
public static void main(String[] args) {
List list = new ArrayList();
list.add("wxd");
list.add(23);
list.add("180cm");
list.add("80kg");
//迭代器运行原理
Iterator iterator = list.iterator();//得到一个集合的迭代器
//hasNext()判断是否还有下一个元素 有返回true while继续执行 无返回false while不执行
while (iterator.hasNext()){
//next() 指针下移 将下移以后集合位置上的元素返回
System.out.println(iterator.next());
}
}
}
2.2.2、 iterator.hasNext()和iterator.next()源码解释
2.2.2.1、iterator.hasNext()
2.2.2.2、iterator.next()
2.2.3、提示
在调用iterator.next()方法之前必须要调用iterator.hasNext()进行检测,若不调用,且下一条记录无效,直接调用iterator.next()会抛出NoSuchElementException异常
如果需要再次遍历需要重置迭代器
2.3、Collection接口遍历元素方式—for循环增强
增强for循环可以代替iterator迭代器。
特点:增强for循环就是简化班的iterator
本质一样,只能用于遍历集合和数组
2.3.1演示
public class CollectionFor {
@SuppressWarnings({"all"})
public static void main(String[] args) {
Collection collection = new ArrayList();
collection.add(new Book1("三国演绎", "罗贯中", 10.0));
collection.add(new Book1("小李飞刀", "古龙", 5.1));
collection.add(new Book1("红楼们", "曹雪清", 34.6));
System.out.println("collection=" + collection);
//语法
// for(元素类型 元素名 : 集合名或数组名){
// 访问元素
// }
//使用增强for循环
for (Object book : collection) {
System.out.println("book=" + book);
}
//增强for循环 也可以直接在数组使用
int[] nums = {1, 8, 6, 9, 752, 3, 8, 24, 78, 24, 85};
System.out.println("增强for循环也可以在数组使用--");
for (int i : nums) {
System.out.println("i=" + i);
}
}
}
运行结果
2.3.2、增强for循环底层仍然是iterator迭代器
可以理解为增强for就是简化版本的迭代器遍历
👇在for循环处debug,看源码
首先,调用了iterator,返回 一个新的对象👇
跳出那个方法,再进去👇调用了hasNext()方法 判断是否有下一个元素
接着跳出,再进去👇调用了next()方法 获取游标对应的数据
执行一次next()方法,游标往下移动一次
2.3.3、小彩蛋
2.3.3.1、idea while 快捷键 itit 👇
2.3.3.1、增强for循环 快捷键 I👇