单列集合(Collection)
一、单列集合:
1.特点
单列集合Collection:是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的
2.Collection集合系列常用方法:
添加的元素是有序(这里的有序是存和取的顺序是一样的)、可重复、有索引
方法名称 | 说明 |
---|---|
punlic boolean add(E e) | 把给定的对象添加到当前集合当中 |
public void clear () | 清空集合中所有的元素 |
public booolean remove(E e) | 把给定的对象再当前集合中删除 |
public bolean cintains(Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数/集合的长度 |
package com_06Gather._01gatherStructure;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest01 {
public static void main(String[] args) {
/*
| 方法名称 | 说明 |
| ---------------------------------- | -------------------------------- |
| punlic boolean add(E e) | 把给定的对象添加到当前集合当中 |
| public void clear () | 清空集合中所有的元素 |
| public booolean remove(E e) | 把给定的对象再当前集合中删除 |
| public bolean cintains(Object obj) | 判断当前集合中是否包含给定的对象 |
| public boolean isEmpty() | 判断当前集合是否为空 |
| public int size() | 返回集合中元素的个数/集合的长度 |
注意点:
collection是一个接口,我们不能直接创建它的对象
所以,我们在使用方法的时候,只能创建实现类的对象
实现类:ArraysList
*/
//利用多态的方式创建实现类对象
Collection<String> coll = new ArrayList<>();
//1.punlic boolean add(E e) | 把给定的对象添加到当前集合当中
//细节:返回值
//1.如果我们往List集合中添加元素,那么方法永远返回true,因为List集合是允许元素,不存在添加失败的情况
//2.但是往Set集合添加元素的时候,如果添加的元素已经存在,那么就会添加失败返回false,因为Set集合是不允许重复的
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
System.out.println(coll);
//2.public void clear () | 清空集合中所有的元素
//coll.clear();
System.out.println(coll);
//3.public booolean remove(E e) | 把给定的对象再当前集合中删除
//细节1:因为Collection里面定义的是共性的方法,所以此时不能通过索引删除,只能通过元素的对象进行删除
//细节2:方法会有一个布尔类型发的返回值,删除成功返回true,删除失败返回false
//如果要删除的元素不存在就会删除失败
//coll.remove("bbb");
boolean result1 = coll.remove("bbb");
boolean result2 = coll.remove("eee");
System.out.println(coll);
System.out.println(result1);
System.out.println(result2);
//4.public bolean cintains(Object obj) | 判断当前集合中是否包含给定的对象
//细节:contaains方法底层依赖的是equals方法进行判断是否存在的
//所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在JavaBean类中一定要重写equals方法
boolean result3 = coll.contains("aaa");
boolean result4 = coll.contains("ddd");
System.out.println(coll);
System.out.println(result3);
System.out.println(result4);
//5.public boolean isEmpty() | 判断当前集合是否为空
boolean result5 = coll.isEmpty(); //底层判断的是集合的长度是否为0
System.out.println(result5);
//6.public int size() | 返回集合中元素的个数/集合的长度
int size = coll.size();
System.out.println(size);
}
}
package com_06Gather._01gatherStructure;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest02 {
public static void main(String[] args) {
//1.创建集合对象
Collection<Student> coll = new ArrayList<>();
//2.创建3个集合对象
Student s1 = new Student("xiaoshishi",22);
Student s2 = new Student("xiaodandan",21);
Student s3 = new Student("xiaohuihui",18);
//3.将学生对象添加到集合当中
coll.add(s1);
coll.add(s2);
coll.add(s3);
//4.判断结合中某一个学生对象是否存在
Student s4 = new Student("xiaohuihui",18);
//如果同姓名,同年龄,就认为是同一个学生
boolean result2 = coll.contains(s4);
//因为contains方法在底层是依靠equals方法判断对象是否一致的
//如果存的是自定义对象,没有重写equals方法,那么默认使用的是Object类中的equals方法进行判断
//而在Object类中的equals方法,是依赖地址值进行判断的
//需求:如果同姓名同年龄,就认为是同一个学生
//所以,需要在自定义的JavaBean类中,重写equals方法就可以了
System.out.println(result2); //false
}
}
重写之后的equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
3.Collecction集合系列的通用遍历方式
(1)迭代器遍历(不依赖索引)
迭代器再Java中的类是Iterator,迭代器是集合专用的遍历方式
①Collection集合获取迭代器
方法名称 | 说明 |
---|---|
Iterator iterator | 返回迭代器对象,默认指向当前集合的0索引 |
②Iterator中的常用方法
方法名称 | 说明 |
---|---|
boolean hasNext() | 判断当前位置是否有元素,有元素返回true,没有元素则返回false |
E next() | 获取当前位置的元素,并将迭代器对象移向下一个位置 |
Iterator<String> it = list.iterator(); //获取迭代器对象
while(it.hasNtxt()){ //判断当前指向位置是否有元素,有元素返回true,否则返回false
String str = it.next(); //获取当前元素,并向后移动指针
System.out.println(str); //将获取到的元素进行打印
//while循环结束的条件:当it.hasNext()没有获取到元素的时候返回false,则循环停止
}
package com_06Gather._01gatherStructure;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest03_Iterator {
public static void main(String[] args) {
/*
(1)Collection集合获取迭代器
| 方法名称 | 说明 |
| ---------------------- | --------------------------------------- |
| Iterator<E e> iterator | 返回迭代器对象,默认指向当前集合的0索引 |
(2)Iterator中的常用方法
| 方法名称 | 说明 |
| ------------------- | ----------------------------------------------------------- |
| boolean hasNext() | 判断当前位置是否有元素,有元素返回true,没有元素则返回false |
| E next() | 获取当前位置的元素,并将迭代器对象移向下一个位置 |
*/
//1.创建集合对象并添加元素
Collection <String> coll = new ArrayList<>();
coll.add("dcd");
coll.add("aaa");
coll.add("sss");
coll.add("ddd");
coll.add("fff");
//2.获取迭代器对象
//迭代器就好比是一个箭头,默认指向集合的0索引处
Iterator<String> it = coll.iterator();
//3.利用循环不断地去获取集合里面的每一个元素
while (it.hasNext()){
String str = it.next();
//4.next方法的两件事情
//(1)获取当前指向的元素
//(2)将指针向后移动一个索引单位
System.out.print(str+", ");
}
}
}
③注意事项:
Ⅰ、如果当前位置没有元素,还要强行获取,会报错NoSuchElementException(没有这个元素异常)
Ⅱ、迭代器遍历完毕,指针不会复位
Ⅲ、循环中只能使用一次next方法
Ⅳ、迭代器遍历时,不能用集合的方法进行增加或删除
package com_06Gather._01gatherStructure;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest04_Iterator {
public static void main(String[] args) {
/*注意点
Ⅰ、报错NoSuchElementException(没有这个元素异常)
Ⅱ、迭代器遍历完毕,指针不会复位
Ⅲ、循环中只能使用一次next方法
Ⅳ、迭代器遍历时,不能用集合的方法进行增加或删除
如果要进行删除操作,只能使用Iterator里面的remove方法进行删除,但如果要增加暂时没有办法
*/
//1.使用集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");
coll.add("eee");
//2.获取迭代器对象
//迭代器就好比是一个箭头,默认指向集合的0索引
Iterator<String> it = coll.iterator();
//3.利用循环不断地去获取集合中的每一个元素
while(it.hasNext()){
//4.next方法的两件事情
//(1)获取当前指向的元素
//(2)将指针向后移动一个索引单位
String str = it.next();
System.out.println(str);
}
//当上面的循环结束之后,迭代器的指针已经指向了最后没有元素的位置
//System.out.println(it.next()); //报异常:NoSuchElementException
//迭代器遍历完毕,指针不会复位
System.out.println(it.hasNext());
System.out.println(it.hasNext());
System.out.println(it.hasNext()); //false
//如果我们要继续使用第二次遍历集合,只能再次获取一个新的迭代器对象
//2.获取迭代器对象
//迭代器就好比是一个箭头,默认指向集合的0索引
Iterator<String> it2 = coll.iterator();
//3.利用循环不断地去获取集合中的每一个元素
while(it2.hasNext()){
//4.next方法的两件事情
//(1)获取当前指向的元素
//(2)将指针向后移动一个索引单位
String str2 = it2.next();
//循环中只能使用一次next方法
//Ⅳ、迭代器遍历时,不能用集合的方法进行增加或删除
if("bbb".equals(str2)){
//coll.add("bbb"); //报异常:ConcurrentModificationException===》并发修改异常
//这里要删除的话,不能使用集合的方法进行删除
//而是要使用Iterator里面的方法remove
it2.remove();
}
System.out.println(str2);
System.out.println(str2); //报异常NoSuchElementException
}
}
}
④小结
1.迭代器在遍历集合的时候是不依赖索引的
2.迭代器里面要掌握的三个方法:
Iterator<String> it = list.iterator(); //获取迭代器对象
while(it.hasNtxt()){ //判断当前指向位置是否有元素,有元素返回true,否则返回false
String str = it.next(); //获取当前元素,并向后移动指针
System.out.println(str); //将获取到的元素进行打印
//while循环结束的条件:当it.hasNext()没有获取到元素的时候返回false,则循环停止
}
3.迭代器的四个细节
Ⅰ、如果当前位置没有元素,还要强行获取,会报错NoSuchElementException(没有这个元素异常)
Ⅱ、迭代器遍历完毕,指针不会复位
Ⅲ、循环中只能使用一次next方法
Ⅳ、迭代器遍历的过程中,不能用集合的方法进行增加或删除
(2)增强for便利
★增强for的底层就是迭代器,为了简化迭代器的代码书写的
★它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
★所有的单列集合和数组才能用增强for进行遍历
①格式:
for(元素的数据类型 变量名 :数组或集合){
}
package com_06Gather._01gatherStructure;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest05_for {
public static void main(String[] args) {
/*
★增强for的底层就是迭代器,为了简化迭代器的代码书写的
★它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
★所有的单列集合和数组才能用增强for进行遍历
##### (1)格式:
for(元素的数据类型 变量名 :数组或集合){
}
*/
//1.创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");
//使用增强for进行遍历
//注意点
//s:biaoshi一个第三方变量,在循环过程中一次表示集合中的每一个数据
for (String str : coll){
System.out.println(str);
}
//快捷方式书写增强for
//集合名.for+回车
}
}
②增强for的细节:
★修改增强for中的变量,不会改变集合中原本的数据
for(String s : coll){
s = "q";
}
(3)Lambda表达式遍历
得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式
方法名称 | 说明 |
---|---|
default void forEach(Consumer<?super T > action) : | 结合lambda遍历集合 |
package com_06Gather._01gatherStructure;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest06_Lambda {
public static void main(String[] args) {
/*
#### ③Lambda表达式遍历
得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式
| 方法名称 | 说明 |
| -------------------------------------------------- | ------------------ |
| default void forEach(Consumer<?super T > action) : | 结合lambda遍历集合 |
*/
//1.创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");
//2.利用匿名内部类的形式遍历
//forEach的底层原理
//会自己遍历集合,一次得到每一个元素,
// 把得到的每一个元素,传递给下面的accept方法
//s一次表示集合中的灭一个数据
/*coll.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});*/
//利用Lambda表达式进行遍历集合、
coll.forEach(s ->System.out.println(s));
}
}
4.Collection总结
1.collection是单列集合的顶层接口,所有防火阀被list和Set系列集合共享
2.创建成员方法:
add ,clear , remove, contains, idEmpty , size
3.三种通用的遍历方式
Ⅰ迭代器:在遍历的过程中需要删除元素,请使用迭代器
Ⅱ增强for:仅遍历
ⅢLambda:仅遍历