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"));//不存在返回false System.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号