List同样是一个接口,继承于Collection
public static void main(String[] args) {
/*
List独有的方法
void add(int index,E element) 在集合的指定位置插入元素
E remove(int index) 删除指定索引的元素,并且返回被删除的元素
E set(int index,E element) 修改指定索引的元素,返回被修改的元素
E get(int index) 返回指定索引的元素
*/
//1、创建一个集合,List是一个接口,不可以创建接口的对象,只能创建接口的实现类对象(实现了这个接口的类,用这个类创建对象)
List<String> list=new ArrayList<>();
//2、添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
//在指定的位置添加元素,原来索引处的元素会依次往后移
//List删除元素的两个方法---->1、直接删除元素 2、通过索引删除元素
list.add(1,"QQQ");
System.out.println(list);
//在调用方法的时候,如果方法出现了重载现象,会优先调用实参和形参相同的那个方法
/*
remove(object o)----->object是一个对象,删除数字1时,先将其改为包装类
remove(int index)
*/
System.out.println(list.remove(0));
}
list集合多出了索引,可以根据索引进行增删改查。
需要注意的,重载后的方法会优先调用实参和形参相同类型的方法。
remove(1)删除的是索引为1的元素。如果想删除1元素,需要调用remove(object o),设置1元素的包装类再进行删除
Integer i=Integer.valueOf(1);
list.remove(i);
List的五种遍历方式
1、迭代器
2、列表迭代器
3、增强for
4、Lambda表达式
5、普通for循环
public static void main(String[] args) {
/*
五种遍历方法
1、迭代器
2、列表迭代器
3、增强for
4、Lambda表达式
5、普通for循环
*/
//1、创建一个集合,List是一个接口,不可以创建接口的对象,只能创建接口的实现类对象(实现了这个接口的类,用这个类创建对象)
List<String> list = new ArrayList<>();
//2、添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
//迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String result = it.next();
System.out.println(result);
}
//增强for
//s只是一个第三方的变量
for (String s : list) {
System.out.println(s);
}
//Lambda表达式
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
list.forEach((s -> System.out.println(s)));
//普通for
for (int i = 0; i < list.size(); i++) {
String str=list.get(i);
System.out.println(str);
}
//列表迭代器
//获取一个列表迭代器对象,默认的指向也是索引为0的位置
//额外多了一个方法,在遍历的过程中可以添加元素
ListIterator<String> listIterator=list.listIterator();
while(listIterator.hasNext()){
String result=listIterator.next();
if("bbb".equals(result)){
//只能用迭代器的方法添加,如果用list集合的方法进行添加会并发异常
listIterator.add("QQQ");
}
System.out.println(result);
}
}
特别的:列表迭代器和普通的迭代器相似,但是多出了hasPrevious()和previous()方法,指针可以回调。同时多出了.add()方法,在遍历的过程中可以新增元素。