collection
add方法细节:
remove方法细节:
contains方法细节:
如果集合中存储的是自定义对象, student之类的, 也想通过contains进行判断, 就必须在javaBean中重写equals方法
contains在arrayList中源代码:在底层调用了equals方法
重写:
一些回顾equals知识:
string中equals先判断是不是字符串,不是字符串直接false;
stringbuilder中无equals,继承的是父类object中,默认比较两者地址值。
Collection遍历:普通for无法用于set类型集合(无索引)
1、迭代器遍历:不依赖索引!!!!不会出现索引越界错误
关键词:Iterator类
next:获取对应索引的值,并将指针移到下一位
hashnext:返回布尔类型,多用于循环判断
迭代器例子:
public class diedai {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
//获取迭代器对象
Iterator<String> it =list.iterator();
//it.hasNext()判断该索引有无元素
while (it.hasNext()){
//next:获取该索引的值,将指针移到下一位
String str = it.next();
System.out.println(str);
}
}
迭代器细节:
1.报错NoSuchElementException(不依赖索引!!!!不会出现索引越界错误,会出现元素不存在错误)
2.迭代器遍历完毕,指针不会复位,除非重新创建一个迭代器
3.循环中只能用一次next方法,next调用一次指针向后移动一次,next数量都是1不会出现错误
4.迭代器遍历时,不能用集合的方法进行增加或者删除,非要删元素可以利用迭代器自己的remove方法,添加元素暂时没办法(没学到)
关于细节4:仅限迭代时!!!!
2、增强for遍历:双列集合不适用
格式:for(数据类型 变量名:遍历集合名字)
for(集合/数组中元素的数据类型 变量名 : 集合/数组名) {
// 已经将当前遍历到的元素封装到变量中了,直接使用变量即可
细节:
3、lambda遍历:利用forEach方法,再结合lambda表达式的方式进行遍历
底层原理:
利用匿名内部类的形式
其实也会自己遍历集合,依次得到每一个元素
把得到的每一个元素,传递给下面的accept方法
例子:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
//lambda完整版
// list.forEach(new Consumer<String>() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// });
//lambda省略版
list.forEach(s-> System.out.println(s));
}
}