Collection集合
Collection集合
概述
- 是单列集合的顶层接口,它表示一组对象,这些对象也成为Collection的元素
- JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现
创建Collection集合的对象
- 多态的方式
- 具体的实现类ArrayList
Collection集合常用方法
| 方法名 | 说明 |
| boolean add(E e) | 添加元素 |
| boolean remove(Object o) | 移出指定元素 |
| void clean() | 清空元素 |
| boolean contains(Object o) | 判断集合中是否存在指定元素 |
| int size() | 集合长度 |
| boolean isEmpty() | 判断集合是否为空 |
🌰
import java.util.ArrayList; import java.util.Collection; public class CollectionDemo01 { public static void main(String[] args) { //创建集合对象 Collection<String> c = new ArrayList<String>(); /* Ctrl + B 可以查看类的信息 Alt + 7 打开一个窗口能看类的所有信息 */ //add方法永远返回的是true,因为add方法里只有return true c.add("Hello"); c.add("World");System.out.println(c.remove("World"));//存在即移出返回true
System.out.println(c.remove("java"));//不存在返回falseSystem.out.println(c.contains("Hello"));//判断是否存在Hello
System.out.println(c.size());
c.clear();
//输出集合
System.out.println(c);
}
}
迭代器 iterator(集合专用遍历方式)
迭代器是一个接口,返回值类型也是一个迭代器
- iterator<E>iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
- 迭代器是通过集合iterator()方法得到的,所以它是依赖于集合存在的
iterator中常用方法
| 方法名 | 说明 |
| E next() | 返回迭代器中下一个元素 |
| boolean hasNext() | 如果迭代具有更多元素,返回true |
🌰
import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; public class iteratorDemo { public static void main(String[] args) { Collection<String> c = new ArrayList<String>(); c.add("Hello"); c.add("World"); c.add("javaee");//iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
Iterator<String> it = c.iterator();while(it.hasNext()){
String s = it.next();//不是直接输出it.next()而是用一个s接收,是为了方便其他操作
System.out.println(s);
}
}
}
List集合
List集合是Collection集合的接口,也就是说Collection集合中的方法List集合都能使用
List集合概述
- 有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置
- 用户可以通过整数索引访问元素,并搜索列表中的元素
- 与Set集合不同,列表通常允许重复的元素
List集合特点
- 有序:存储和取出的元素顺序一致
- 可重复:存储的元素可以重复
🌰
import java.util.ArrayList; import java.util.List; import java.util.Iterator; public class ListDemo { public static void main(String[] args) { List<String> list = new ArrayList<String>(); //添加元素 list.add("Hello"); list.add("World"); list.add("java");//顺序存储 list.add("World");//可重复存储 //输出集合对象 System.out.println(list);
//迭代器方法遍历
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s= it.next();
System.out.println(s);
}
}
}
List集合特有方法
它爹Collection没有的,它儿子ArrayList有的
| 方法名 | 说明 |
| void add(int index,E element) | 指定位置插入指定元素 |
| E remove(int index) | 删除指定索引处元素,返回被删除元素 |
| E set(int index,E element) | 修改指定索引处元素,返回被修改元素 |
| E get(int index) | 返回指定索引处元素 |
🌰
import java.util.ArrayList; import java.util.List; import java.util.Iterator; public class ListDemo { public static void main(String[] args) { List<String> list = new ArrayList<String>(); //添加元素 list.add("Hello"); list.add("World"); list.add("java");//顺序存储 list.add("World");//可重复list.add(2,"good");//从0开始,不能越界
list.set(0,"wow");//修改指定索引元素,不能越界
String a = list.get(3);//返回指定索引元素,不能越界
System.out.println(a);
//输出集合对象
System.out.println(list);list.remove("World");//顺序删除
list.remove(1);//索引删除,不能越界
//迭代器方法遍历
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s= it.next();
System.out.println(s);
}
System.out.println("-------------");
//用for循环改进遍历
for(int i = 0; i < list.size();i++){
String s = list.get(i);
System.out.println(s);
}
}
}
🌰List集合存储学生对象并遍历
//1.定义学生类 //2.创建List集合 //3.创建学生对象 //4.把学生添加到集合 //5.遍历集合(迭代器、for循环) import java.util.ArrayList; import java.util.List; import java.util.Iterator; public class ListDemo { public static void main(String[] args) { //创建List集合对象 List<Student> list = new ArrayList<Student>();//创建学生对象
Student s1 = new Student("lxx",18);
Student s2 = new Student("mtt",18);
Student s3 = new Student("lho",18);
Student s4 = new Student("lbl",18);
Student s5 = new Student("hxq",18);//把学生添加到集合
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);//迭代器遍历
Iterator<Student> it = list.iterator();
while(it.hasNext()){
Student s = it.next();
System.out.println(s.getName() + "," + s.getAge());
}
System.out.println("--------");
//for循环遍历
for(int i = 0; i < list.size();i++){
Student s = list.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
}
列表迭代器ListIterator <E>
继承自Iterator,所以可以直接使用next()和hasNext()
用于允许程序员沿任意方向遍历列表的列表迭代器,可以在迭代期间修改列表,并获取列表中迭代器的当前位置
列表迭代器常用方法
| 方法名 | 说明 |
| E next() | 返回迭代器中下一个元素 |
| boolean hasNext() | 如果迭代有更多元素,返回true |
| E previous() | 返回列表中上一个元素 |
| boolean hasPrevious() | 如果此列表迭代器在相反方向遍历列表时具有更多元素,返回true |
| void add(E e) | 插入指定元素 |
🌰
import java.util.ArrayList; import java.util.List; import java.util.ListIterator;public class listIteratorDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();list.add("Hello");
list.add("World");ListIterator<String> lit = list.listIterator();
//正向遍历
while(lit.hasNext()){
String s = lit.next();
System.out.println(s);
}
System.out.println("-------------");
//逆向遍历
while(lit.hasPrevious()){
String s = lit.previous();
System.out.println(s);
}
while(lit.hasNext()){
String s = lit.next();
if(s.equals("World")) {
lit.add("javaee");//用列表迭代器的添加方法,不会报错
}
}
//直接遍历
System.out.println(list);
}
}
增强for循环
简化数组和Collection集合的遍历
- 实现iterable接口的类允许其对象成为增强型for语句的目标
- JDK5之后出现的,其内部原理是一个迭代器
格式
for(元素数据类型变量名:数组/Collection集合){
//在此处使用变量即可,该变量就是元素
}
🌰
int[] arr = {1,2,3,4,5};
for(int i:arr){
System.out.println(i);
}
三种遍历
//迭代器遍历,集合特有的遍历方式
Iterator<Student> it = list.iterator();
while(it.hasNext()){
Student s = it.next();
System.out.println("s.getName()" + "," + s.getAge());
}
//普通for,有索引的遍历方式
for(int i = 0;i < it.size();i++){
Student s = list.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
//增强for,最方便的遍历方式
for(Student s : list){
System.out.pritnln(s.getName() + "," + s.getAge());
}
List集合子类特点
List集合常用子类:ArrayList、LinkedList
- ArrayList:底层数据结构是数组,查询快、增删慢
- LinkedList:底层数据结构是链表,查询慢、增删快
🌰
//创建ArrayList和LinkedList对象并用三种方式遍历 import java.util.List; import java.util.ArrayList; import java.util.LinkedList; import java.util.Iterator; public class ListDemo { public static void main(String[] args) { ArrayList<String> array = new ArrayList<>(); array.add("hello"); array.add("world"); array.add("java"); for(String s :array) { System.out.println(s); } System.out.println("---------------"); for(int i = 0 ;i < array.size();i++){ String s = array.get(i); System.out.println(s); } System.out.println("-----------------"); Iterator<String> it = array.iterator(); while(it.hasNext()){ String s = it.next(); System.out.println(s); } System.out.println("-------------");LinkedList<String> link = new LinkedList<>();
link.add("hello");
link.add("world");
for(String s :link){
System.out.println(s);
}
System.out.println("-------------");
for(int i = 0;i < link.size();i++){
String s = link.get(i);
System.out.println(s);
}
System.out.println("-------------");
Iterator<String> tt = link.iterator();
while(tt.hasNext()){
String s = tt.next();
System.out.println(s);
}
}
}
LinkedList集合的特有功能
| 方法名 | 说明 |
| public void addFirst(E e) | 表头插入指定元素 |
| public void addLast(E e) | 表尾插入指定元素 |
| public E getFirst() | 返回列表第一个元素 |
| public E getLast() | 返回列表最后一个元素 |
| public E removeFirst() | 删除列表第一个元素并返回 |
| public E removeLast() | 删除列表最后一个元素并返回 |
🌰
import java.util.LinkedList;public class LinkedListDemo {
public static void main(String[] args) {
//创建集合对象
LinkedList<String> link = new LinkedList<String>();
//添加元素
link.add("hello");
link.add("world");
//输出集合
System.out.println(link);
System.out.println("----------------");
link.addFirst("First");//表头添加
link.addLast("Last");//表尾添加
System.out.println(link);
System.out.println("----------------");
String first = link.getFirst();//获取表头
String last = link.getLast();//获取表尾
System.out.println(first);
System.out.println(last);
System.out.println("----------------");String delFirst = link.removeFirst();//删除表头
String delLast = link.removeLast();//删除表尾巴
System.out.println(link);
}
}
Set集合
public interface Set< E > extends Collection<E>
- 不包含重复元素
- 没有带索引的方法,所以不能使用普通for循环
🌰
import java.util.HashSet; //HashSet:对集合的迭代顺序不做任何保证 import java.util.Set; public class SetDemo { public static void main(String[] args) { //创建集合对象,Set是一个接口不能直接创建对象 Set<String> set = new HashSet<String>();//采用哈希表实现 set.add("hello"); set.add("world"); set.add("java"); set.add("world");//只会显示一个world,不包含重复元素for(String s:set){
System.out.println(s);//结果是:word java hello,因为HashSet不保证迭代顺序
}
}
}
HashSet
HashSet集合特点
- 底层数据结构是哈希表
- 对集合的迭代顺序不做保证,就是不保证存储和取出的元素顺序一致
- 没有带索引的方法,不能使用普通for循环遍历
- 由于是Set集合,所以不包含重复元素


浙公网安备 33010602011771号