1、迭代器作用
/**
* @author qc
* @date 2021-4-20
*/
public class TestArrayList {
@Test
public void testArrayList(){
/**
* 集合list和 SuperArray基本上没有任何区别
*/
//链表
// List<User> list = new LinkedList<>();
List<User> list = new ArrayList<>();
list.add(new User("AAA","111"));
list.add(new User("BBB","222"));
list.add(new User("CCC","333"));
list.add(new User("DDD","444"));
list.add(new User("EEE","555"));
//放在1的后面
list.add(2,new User("fff","666"));
//删除该下标上的数据
list.remove(3);
/**删除所传入该对象的数据
* 不能够直接删除,因为remove(object)方法默认用equals对比内存地址
* 所以要在User中重写equals,就可以将该对象删除
*/
list.remove(new User("BBB","222"));
//清空list
// list.clear();
//普通for循环遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getUsername());
}
//增强for循环遍历
for(User user : list){
System.out.println(user.getUsername());
}
/** 迭代器
* 快捷键:list.iterator().var回车 或 list.iterator();alt+enter
* 三大方法:iterator.hasNext() 有没有下一个 返回ture或false
* iterator.next() 拿到下一个
* iterator.remove();
*/
Iterator<User> iterator = list.iterator();
while (iterator.hasNext()){
User next = iterator.next();
System.out.println(next);
}
/**iterator.remove();作用很强大
* 1.放在增强for循环中不会报错
* 2.用于删除操作,不会出现list.remove()中因元素前移导致不能够完全删除的情况
*/
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(1);
list1.add(1);
list1.add(2);
list1.add(2);
list1.add(4);
list1.add(5);
for (int i = 0; i < list.size(); i++) {
if(list1.get(i) == 2){
list1.remove(i);
//可以解决元素前移导致不能够完全删除的情况,但会比较麻烦
i--;
}
}
// 增强for循环如果执行删除方法,一定会报错
// for(Integer integer : list1){
// if(integer == 4){
// list1.remove(integer);
// }
// }
System.out.println("---------------");
Iterator<Integer> iterator1 = list1.iterator();
while (iterator1.hasNext()){
Integer next = iterator1.next();
if(next == 2){
iterator.remove();
}
}
for(Integer integer : list1){
System.out.println(integer);
}
}
}