ArrayList与Collection的区别
- Collection是接口,ArrayList是实体类
- 接口不能自己实例化,实体类可以实例化,类的实例化对象可以用实现的接口接收
- ArrayList a = new ArrayList() 可以调用ArrayList所有的方法
- Collection a = new ArrayList() 只能调用Collection中有的方法
Collection集合常用方法
boolean add(E e):添加元素;
boolean remove(Object o ):从集合中移除指定的元素;
boolean removeif(Object o):根据条件进行删除;
void clear():清空集合;
boolean contains(Object o):判断集合中是否存在指定元素;
boolean isEmpty():判断集合是否为空;
int size():集合的长度,也就是集合中元素的个数
Collection 集合的遍历
Iterator:迭代器,集合的专用遍历方式
迭代器对象一旦被创建,默认指向集合的0索引处
注:迭代器的泛型需要和集合的泛型保持一致
public static void main(String[] args) {
Collection<String> collection = new ArrayList();
collection.add("w");
collection.add("s");
collection.add("z");
collection.add("d");
collection.add("s");
collection.add("a");
// 集合对象.迭代器
Iterator<String> iterator = collection.iterator();
//判断当前元素是否有元素可以被取出
// iterator.hasNext();
//两个功能:1、取出当前位置的元素 ;2、将迭代器往后移动一个索引
// iterator.next();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
练习:创建一个集合,并使用循环遍历此集合,判断获取的元素是否为w,如果是则删除。
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("q");
arrayList.add("w");
arrayList.add("w");
arrayList.add("e");
arrayList.add("r");
arrayList.add("t");
for (int i = 0; i < arrayList.size(); i++) {
String s = arrayList.get(i);
if ("w".equals(s)){
arrayList.remove(i);
}
}
System.out.println(arrayList);
此方法的弊端:
删除后,索引自动加1,故跳过了原本的w(1索引),如图所示
修复此错误的方法只需要在arratList.remove(i);下方加上i--即可。
或者使用迭代器的删除方法:remove()
迭代器的删除功能会在删除所在索引后自动进行-1操作。
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("q");
arrayList.add("w");
arrayList.add("w");
arrayList.add("e");
arrayList.add("r");
arrayList.add("t");
Iterator<String> it = arrayList.iterator();
while (it.hasNext()){
String next = it.next();
if (next.equals("w")){
it.remove();
}
}
System.out.println(arrayList);
增强for
格式:for(数据类型 s:要遍历的数组或集合){ //s代表循环的集合的每一个元素,自定义名称
需要执行的语句;
}
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("w");
arrayList.add("s");
arrayList.add("d");
arrayList.add("s");
arrayList.add("g");
arrayList.add("a");
for(String s : arrayList){
System.out.println(s);
}
运行结果:
注:s只代表第三方变量,无法通过修改s修改到集合中的数据
例子:
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("w");
arrayList.add("s");
arrayList.add("d");
arrayList.add("s");
arrayList.add("g");
arrayList.add("a");
for(String s : arrayList){
s = "P";
System.out.println(s);
}
System.out.println(arrayList);
运行结果:
图解:
练习:
创建一个集合存储学生对象,存储3个学生对象并在控制台遍历。
先创建一个标准Javabean学生类,拥有姓名和年龄属性。
//存学生对象,故泛型写Student
ArrayList<Student> list = new ArrayList<>();
Student s = new Student("小林",23);
Student s2 = new Student("小吴",22);
Student s3 = new Student("小明",24);
list.add(s);
list.add(s2);
list.add(s3);
//迭代器
Iterator<Student> it = list.iterator();
while(it.hasNext()){
Student next = it.next();
System.out.println(next);
}
System.out.println("---------------------------");
//增强for
for(Student st : list){
System.out.println(st);
}
运行结果: