一、什么是集合
1.1 概念
对象的容器,实现了对对象常用的操作
1.2 与数组的区别
- 数组长度固定,集合长度不固定。
- 数组可以存储基本类型和引用类型,集合只能存储引用类型。
1.3 导包
import java.util.*;
二、Collection体系
2.1 Collection 父接口
特点:代表一组任意类型的对象,无序、无下标、不能重复。
创建集合: C
ollection collection = new ArrayList();
2.1.1 常用方法
- 添加元素
collection.add();
- 删除元素
collection.remove();
collection.clear();
- 遍历元素(重点)
- 使用增强for(因为无下标)
for(Object object : collection){ }
- 使用迭代器
//haNext(); 有没有下一个元素 //next(); 获取下一个元素 //remove(); 删除当前元素 Iterator it = collection.iterator(); while(it.hasNext()){ String object = (String)it.next(); //强制 // 可以使用it.remove(); 进行移除元素 // collection.remove(); 不能用collection其他方法 会报并发修改异常 }
- 判断
collection.contains():是判断一个集合是否包含某个指定对象;
collection.isEmpty():是判断一个集合是否为空值;
2.2 List 子接口
特点:有序、有下标、元素可重复
创建集合对象 List list = new ArrayList<>( );
2.2.1 常用方法
- 添加元素
list.add( );
会对基本类型进行自动装箱
- 删除元素 可以用索引
list.remove(0)
当删除数字与索引矛盾时 对数字强转list.remove((Object) 10)
或list.remove(new Integer(10))
- 遍历
- 使用for遍历
for(int i = 0; i < lise.size(); i++){ System.out.print(list.get(i)); }
- 使用增强for
for(Object list: collection){ }
- 使用迭代器
Iterator it = collection.iterator(); while(it.hasNext()){ String object = (String)it.next(); //强转 // 可以使用it.remove(); 进行移除元素 // collection.remove(); 不能用collection其他方法 会报并发修改异常 }
- 使用列表迭代器 💡(注意和迭代器区别)
ListIterator li = list.listIterator(); while(li.hasNext()){ System.out.println(li.nextIndex() + ":" + li.next()); //从前往后遍历 } while(li.hasPrevious()){ System.out.println(li.previousIndex() + ":" + li.previous()); //从后往前遍历 }
- 获取
list.indexOf( );
- 返回子集合
sublist(x, y);
左闭右开List subList = list.subList(1, 3);
返回索引 1、2
2.2.2 List实现类
- ArrayList 【重点】
- 数组结构实现,必须要连续空间,查询快、增删慢
- Vector
- 数组结构实现,查询快、增删慢
- LinkedList
- 双向链表结构实现,无需连续空间,增删快,查询慢
2.2.2.1 ArrayList
创建集合 ArrayList arrayList = new ArrayList<>();
- 添加元素
arrayList.add();
- 删除元素
arrayList.remove(new Student("name", 10));
这里重写了 equals(this == obj) 方法
public boolean equals(Object obj){ //1 判断是不是同一个对象 if(this == obj){ return true; } //2 判断是否为空 if(obj == null){ return false; } //3 判断是否是Student类型 if(obj instanceof Student){ Student == (Student)obj; //4 比较属性 if(this.name.equals(s.getName()) && this.age == s.getAge()){ return true; } } //5 不满足条件返回false return false; }
- 遍历元素【重点】
- 使用迭代器
Iterator it = arrayList.iterator(); while(it.hasNext()){ Student s = (Student)it.next(); //强转 }
- 列表迭代器
ListIterator li = arrayList.listIterator(); while(li.hasNext()){ Student s = (Student)li.next(); //从前往后遍历 } while(li.hasPrevious()){ Student s = (Student)li.previous();//从后往前遍历 }
- 判断
arrayList.contains();
和arrayList.isEmpty();
- 查找
arrayList.indexof();
2.2.2.2 Vector
创建集合 Vector vector = new Vector<>();
增加、删除、判断同上
遍历中枚举器遍历
Enumeration en = vector.elements(); while(en.hasMoreElements()){ String o = (String)en.nextElement(); System.out.println(o); }
2.2.2.3 LinkedList
创建链表集合LinkedList li = new LinkedList<>();
常用方法与List一致