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));}
}