一.本周学习、生活总结
这一周的学习中,我主要学习了有关集合进阶和API的知识点,通过相关的视频,学习了基本的使用方法,这一周所学习的知识相对较难,其中的知识点有些难以理解掌握,所以花费的时间较长。而这次的考核也让我意识到了很多不足,学习速度过慢导致有许多知识点都没见过,一些语法的运用也不熟练。因此我需要提升自己的学习速度,不在某一个知识点上花费过多的时间,让自己能够掌握更多的知识,跟上大部队的脚步。此外,我也会花费一些时间和精力来练习语法的使用,在过去我只是一味地将范例题目进行浅层学习,不对语法进行深入练习,所以在做到新题时往往不知如何下手。多学习,多练习,才能让自己学习的内容更多,质量更好,获得更大的收获。学习就是不断地向困难挑战,攀达更高峰。
在生活上,随着在校时间的增长,我在课堂上所学的知识也在不断深入,学习压力也在不断增加,平时也有了许多作业,事务也有不少,因此有时会花费更多的精力来分配时间。虽然时间有些紧迫了,但这也培养了我分配时间的能力,在小组的学习也让我收获颇丰,学到了更多的知识。
二.下一周学习计划
在下一周中,我将首先把之前遗漏的知识点进行复习和总结,将漏洞补上,接着要按照小组下一周的学习计划开展新的学习,对新的知识点进行相应的学习。我会提高我的学习速度,使得能够跟上步伐,同时也能留下一部分时间来进行复习巩固。
三.本周知识点总结
1.集合结构体
List系列集合:添加的元素是有序、可重复、有索引
Set系列集合:添加的元素是无序、不重复、无索引
2.Collection
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
方法名称 | 说明 |
public boolean add(E e) | 把给定的对象添加到当前集合中 |
public void clear() | 清空集合中所有的元素 |
public boolean remove(E e) | 把给定的对象在当前集合中删除 |
public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数/集合的长度 |
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo1{
public static void main(String[] args){
/*
public boolean add(E e) 添加
public void clear() 清空
public boolean remove(E e) 删除
public boolean contains(Object obj) 判断是否包含
public boolean isEmpty() 判断是否为空
public int size() 集合长度
注意点:
Collection是一个接口,我们不能直接创建他的对象
所以,现在我们学习他的方法时,只能创建他实现类的对象。
实现类:ArrayList
*/
//目的:为了学习Collection接口里面的方法
//自己在做一些练习的时候,还是按照之前的方式去创建对象。
Collection<String> coll = new ArrayList<>();
//1.添加元素
//细节1:如果我们要往List系列集合中添加数据,那么方法永远返回true,因为List系列的集合是允许元素重复的。
//细节2:如果我们要往Set系列集合中添加数据,如果当前要添加元素不存在,方法返回true,表示添加成功。
// 如果当前要添加的元素已经存在,方法返回false,表示添加失败。
// 因为Set系列的集合不允许重复。
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
System.out.println(coll);
//2.清空
//coll.clear();
//3.删除
//细节1:因为Collection里面定义的是共性的方法,所以此时不能通过索引进行删除。只能通过元素的对象进行删除。
//细节2:方法会有一个布尔类型的返回值,删除成功返回true,删除失败返回false
//如果要删除的元素不存在,就会删除失败。
System.out.println(coll.remove("aaa"));
System.out.println(coll);
//4.判断元素是否包含
//细节:底层是依赖equals方法进行判断是否存在的。
//所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在javabean类中,一定要重写equals方法。
boolean result = coll.contains("bbb");
System.out.println(result);
//5.判断集合是否为空
boolean result2 = coll.isEmpty();
System.out.println(result2);//false
//6.获取集合的长度
coll.add("ddd");
int size = coll.size();
System.out.println(size);//3
}
}
结果:
[aaa, bbb, ccc]
true
[bbb, ccc]
true
false
3
Collection的遍历方式
-
迭代器遍历
迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式。
-
增强for遍历
增强for的底层就是迭代器,为了简化迭代器1的代码书写的。
它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
所有的单列集合和数组才能用增强for进行遍历。
-
Lambda表达式遍历
3.Collection集合获取迭代器
方法名称 | 说明 |
Iterator iterator() | 返回迭代器对象,默认指向当前集合的0索引 |
Iterator中的常用方法
方法名称 | 说明 |
boolean hasNext() | 判断当前位置是否有元素,有元素返回true,没有元素返回false |
E next() | 获取当前位置的元素,并将迭代器对象移向下一个位置 |
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
System.out.println(str);
}
细节注意点:
- 报错NoSuchElementException
- 迭代器遍历完毕,指针不会复位
- 循环中只能用一次next方法
- 迭代器遍历时,不能使用集合的方法进行增加或者删除
mport java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class CollectionDemo3{
public static void main(String[] args){
/*
迭代器遍历相关的三个方法:
Iterator<E> iterator() :获取一个迭代器对象
boolean hasNext() :判断当前指向的位置是否有元素
E next() :获取当前指向的元素并移动指针
细节注意点:
1. 报错NoSuchElementException
2. 迭代器遍历完毕,指针不会复位
3. 循环中只能用一次next方法
4. 迭代器遍历时,不能使用集合的方法进行增加或者删除
*/
//1.创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");
//2.获取迭代器对象
//迭代器就好比是一个箭头,默认指向集合的0索引处
Iterator<String> it = coll.iterator();
//3.利用循环不断的去获取集合中的每一个元素
while(it.hasNext()){
//4.next方法的两件事情:获取元素并移动指针
String str = it.next();
System.out.println(str);
}
//当上面循环结束之后,迭代器的指针已经指向了最后没有元素的位置
//System.out.println(it.next());//NoSuchElementException
//迭代器遍历完毕,指针不会复位
System.out.println(it.hasNext());
//如果我们要继续第二次遍历集合,只能再次获取一个新的迭代器对象
Iterator<String> it2 = coll.iterator();
while(it2.hasNext()){
String str = it2.next();
System.out.println(str);
}
}
}
结果:
aaa
bbb
ccc
ddd
false
aaa
bbb
ccc
ddd
4.增强for遍历
格式:
for (String s : list){
System.out.println(s);
}
for(元素的数据类型 变量名:数组或者集合){
…
}
增强for的细节
- 修改增强for中的变量,不会改变集合中原本的数据。
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo6{
public static void main(String[] args){
/*增强for格式:
for(数据类型 变量名: 集合/数组){
......
}
快速生成方式:
集合的名字 + for回车
*/
//1.创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
//2.利用增强for进行遍历
//注意点:
//s其实就是一个第三方变量,在循环的过程中依次表示集合中的每一个数据
for(String s : coll){
System.out.println(s);
}
}
}
结果:
zhangsan
lisi
wangwu
5.Lambda表达式遍历
方法名称 | 说明 |
default void forEach(Consumer <? super T>action): | 结合lambda遍历集合 |
import java.util.Collection;
import java.util.ArrayList;
public class CollectionDemo7{
public static void main(String[] args){
/*
lambda表达式遍历:
default void forEach(Consumer<? super T> action):
*/
//1.创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
//2.利用匿名内部类的形式
//底层原理:
//其实也会自己遍历集合,依次得到每一个元素
//把得到的每一个元素,传递给下面的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));
}
}
结果:
zhangsan
lisi
wangwu
四.结语
不知不觉,在小组中的学习已经经过了五周,在这五周中,我既有收获,也有困扰,亦有喜悦,在接下来的时间里我将与同学们一同学习,一同进步,取得更大的收获。