Collection 接口虽然是集合中最大的接口,但是如果直接使用Collection进行操作,表意并不明确,因此现在Collection接口现在已经不提倡使用,在这总结一下List子接口下的ArrayList类常见用法。
先在此罗列一些List接口中常见常用的方法:
在这些方法中get()方法是Collection接口中没有出现的方法,因此使用get()方法可以很方便的遍历List集合中的每一个元素,这是Collection接口不具备的,遍历Collection集合中的元素则需要使用迭代器。
方法如何简单使用,观察例子:
package com.qty6.demo;
import java.util.ArrayList;
import java.util.List;
/*
1. @author F3ver1
2. @date 2018/10/30 9:20
*/
public class Demo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("红颜弹指老");
list.add("刹那芳华");
list.add("与其天涯思苦");
list.add("恋恋不舍");
list.add("莫若相忘于江湖");
list.add("莫若相忘于江湖");
//打印该集合
System.out.println(list);
System.out.println("-------------------");
//判断长度和是否为空
System.out.println("list集合长度:"+list.size()+",list集合是否为空:"+list.isEmpty());
System.out.println("-------------------");
//查找指定元素的索引
System.out.println(list.indexOf("红颜弹指老"));
System.out.println(list.indexOf("刹那芳华"));
System.out.println(list.lastIndexOf("红颜弹指老"));
System.out.println("-------------------");
//删除指定索引的元素
list.remove(0);
System.out.println(list);
System.out.println("-------------------");
//改变指定索引的元素
list.set(2,"恋恋难忘");
System.out.println(list);
}
}
结果打印:
[红颜弹指老, 刹那芳华, 与其天涯思苦, 恋恋不舍, 莫若相忘于江湖, 莫若相忘于江湖]
————————————————————
list集合长度:6,list集合是否为空:false
————————————————————
0
1
0
————————————————————
[刹那芳华, 与其天涯思苦, 恋恋不舍, 莫若相忘于江湖, 莫若相忘于江湖]
————————————————————
[刹那芳华, 与其天涯思苦, 恋恋难忘, 莫若相忘于江湖, 莫若相忘于江湖]
List是个接口,无法直接为其实例化,选择使用子类ArrayList为其实例化,可以通过以上的例子看出
- List集合可以存储重复的元素
- 元素是有序的,这里的顺序就是按照为集合添加元素时的顺序
- 是可以存储不同数据类型的元素的,由于我规定了String,就只存了String
- 相较于数组,长度是可以变化的
- 只能存储引用数据类型
在这里解释一下第五条
public class Demo6 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(100);//Integer i = 100; Integer i = Integer.valueOf(100);
list.add(200);
System.out.println(list);
}
}
这里100并不是基本数据类型,因为List只能存储引用数据类型,因此是包装类Integer自动装箱,以下语法自然是会报错的
Integer<int> list = new ArrayList<>();
再总结一下List集合存储对象并遍历元素:
package com.qty6.demo;
import java.util.*;
/*
* @author F3ver1
* @date 2018/10/29 17:09
*/
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
class Test{
public static void main(String[] args) {
List<Student> List = new ArrayList<>();
List.add(new Student("qty",20));
List.add(new Student("qqq",21));
List.add(new Student("aaa",22));
Iterator<Student> iterator = List.iterator();
//使用Collection接口中的迭代器遍历
while (iterator.hasNext()){
Student student = iterator.next();
System.out.println("姓名:"+student.getName()+",年龄:"+student.getAge());
}
System.out.println("-----------------------");
//使用for循环,size()方法与get()方法结合遍历
for (int i = 0;i<List.size();i++){
Student student = List.get(i);
System.out.println("姓名:"+student.getName()+",年龄:"+student.getAge());
}
System.out.println("-----------------------");
//使用List特有迭代器遍历
ListIterator<Student> listIterator = List.listIterator();
while (listIterator.hasNext()){
Student student = listIterator.next();
System.out.println("姓名:"+student.getName()+",年龄:"+student.getAge());
}
}
}
结果打印:
姓名:qty,年龄:20
姓名:qqq,年龄:21
姓名:aaa,年龄:22
————————————————
姓名:qty,年龄:20
姓名:qqq,年龄:21
姓名:aaa,年龄:22
————————————————
姓名:qty,年龄:20
姓名:qqq,年龄:21
姓名:aaa,年龄:22