List接口继承自Collection接口,是单列集合的一个重要分支。

在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,

在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一

致。

java list接口注意项总结_java

ArrayList是List接口的一个实现类,底层的存储结构式数组。

ArrayList集合中大部分方法都是从父类Collection和List继承过来的,其中add()方法和get()方法用于实现元素的存取。

package test;

import java.util.*;

public class test1 {
public static void main(String[] args) {
List list = new ArrayList();

//add和get实现集合存取
list.add("java");
list.add("python");
list.add("mysql");
System.out.println("集合长度" + list.size());
System.out.println(list);
//可见集合里的下标也是从0开始的
System.out.println(list.get(2));

//输出:
//集合长度3
//[java, python, mysql]
//mysql

List list1 = new ArrayList();
list1.add("11");
list1.add("22");
list1.add("33");

System.out.println(list1);
//实现一个集合追加到另一个集合
list.addAll(list1);
System.out.println(list);

//查看一个元素在集合中最后出现的位置

System.out.println(list.lastIndexOf("11"));
}
}

ArrayList集合在查询元素时速度很快,但在增删元素时效率较低。

为了克服这种局限性,可以使用List接口的另一个实现类LinkedList。

该集合内部维护了一个双向循环链表,所以LinkedList集合对于元素的增删操作具有很高的效率。

java list接口注意项总结_mysql_02

package test;

import java.util.LinkedList;

public class test2 {
public static void main(String[] args) {
LinkedList link = new LinkedList();
link.add("java");
link.add("python");
link.add("c");
System.out.println(link);
System.out.println(link.toString());
link.add(3, "mysql");
System.out.println(link);
link.addFirst("scala");
System.out.println(link);
System.out.println(link.getFirst());
//link.remove(2);

//输出:
//[java, python, c]
//[java, python, c]
//[java, python, c, mysql]
//[scala, java, python, c, mysql]
//scala

}
}

在程序开发中,经常需要遍历集合中的所有元素。

针对这种需求,JDK专门提供了一个接口Iterator。

Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。

package test;

import java.util.ArrayList;
import java.util.Iterator;

public class test3 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("R");
list.add("java");
list.add("python");
list.add("mysql");
Iterator iterator=list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}

}
}

java list接口注意项总结_python_03

为了简化书写,从JDK5.0开始,提供了foreach循环。foreach循环是一种更加简洁的for循环,也称增强for循环。foreach循环用于遍历数组或集合中的元素,其具体语法格式如下

java list接口注意项总结_mysql_04

package test;

import java.util.ArrayList;

public class test4 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("C");
list.add("Java");
list.add("Python");

for (Object object:list){
System.out.println(object);
}
}

}

foreach不能用于修改,以一个String类型的数组为例。

package test;

public class test5 {
static String[] strs = {"aaa", "bbb", "ccc"};

public static void main(String[] args) {
for(String str:strs){
str="ddd";//不能进行更改
}
System.out.println("foreach循环修改后的数组:"+strs[0]+";"+strs[1]+";"+strs[2]);

for (int i=0;i<strs.length;i++){
strs[i]="ddd";
}
System.out.println("普通for循环修改后的数组:"+strs[0]+";"+strs[1]+";"+strs[2]);
}

}

迭代器周期内不能增删元素,通过一个案例来演示这种异常。

package test;

import java.util.ArrayList;
import java.util.Iterator;

public class test6 {
public static void main(String[] args) {
//test1();
test2();
//test3();
}

public static void test1() {
ArrayList list = new ArrayList();
list.add("java");
list.add("C");
list.add("mysql");
list.add("python");
Iterator it = list.iterator();
while (it.hasNext()) {
Object object = it.next();
if ("java".equals(object)) {
list.remove(object);
}
}
System.out.println(list);
}

public static void test2() {
ArrayList list = new ArrayList();
list.add("java");
list.add("C");
list.add("mysql");
list.add("python");
Iterator it = list.iterator();
while (it.hasNext()) {
Object object = it.next();
if ("java".equals(object)) {
list.remove(object);
list.remove(object);
break;
}
}
System.out.println(list);
}
public static void test3(){
ArrayList list = new ArrayList();
list.add("java");
list.add("C");
list.add("mysql");
list.add("python");
Iterator it=list.iterator();
while (it.hasNext()){
Object object=it.next();
if ("java".equals(object)){
it.remove();
}
}
System.out.println(list);
}
}