List和Set都是collection接口下的,本节学习List接口及其两个实现类ArrayList和LinkedList。
List是有序的,可重复的,可以为null的集合。数组可以存任何数据类型的元素,但List不能存基本数据类型,且数组容量固定,而List的容量动态更新,也因此List的效率要比数组低。
*测试ArrayList
package day32;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test {
public static void main(String[] args) {
ArrayList<String> a1=new ArrayList<String>();
//1.add
a1.add("one");
a1.add("two");
a1.add("Three");
a1.add("one");
a1.add(null);
a1.add("one");
//2.addAll
ArrayList<String> a2=new ArrayList<String>();
a2.add("a2-1");
a2.add("a2-2");
a1.addAll(a2);
//3.遍历
for(String k:a1)
{
System.out.print(k+" ");
}
System.out.println();
//4.包含元素
boolean b=a1.contains("one");
System.out.println(b);
//5.包含集合
boolean c=a1.containsAll(a2);
System.out.println(c);
//6.size/随机访问
int s=a1.size();
for(int i=0;i<s;i++)
{
System.out.print(a1.get(i)+" ");
}
System.out.println();
//7.remove
a1.remove("one");//删第一次出现的
a1.remove(0);//删指定下标的
a1.removeAll(a2);//差集
loop(a1);
//8.迭代器
Iterator<String> i=a1.iterator();
while(i.hasNext())
{
System.out.print(i.next()+" ");
}
System.out.println();
//9.清空
a1.clear();
System.out.println(a1.isEmpty());
}
static void loop(List<String> list)
{
for(String e:list)
{
System.out.print(e+" ");
}
System.out.println();
}
}
它和数组更加接近。
运行结果:
one two Three one null one a2-1 a2-2
true
true
one two Three one null one a2-1 a2-2
Three one null one
Three one null one
true
*测试LinkedList
它相当于一个双向链表,查询慢,但添加和删除的效率高。
package day32;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.List;
public class Test {
public static void main(String[] args) {
LinkedList<String> a1=new LinkedList<String>();
//1.add
a1.add("one");
a1.add("two");
a1.add("Three");
a1.add("one");
a1.add(null);
a1.add("one");
//2.addAll
LinkedList<String> a2=new LinkedList<String>();
a2.add("a2-1");
a2.add("a2-2");
a1.addAll(a2);
//3.遍历
for(String k:a1)
{
System.out.print(k+" ");
}
System.out.println();
//4.包含元素
boolean b=a1.contains("one");
System.out.println(b);
//5.包含集合
boolean c=a1.containsAll(a2);
System.out.println(c);
//6.size/随机访问
int s=a1.size();
for(int i=0;i<s;i++)
{
System.out.print(a1.get(i)+" ");
}
System.out.println();
//7.remove
a1.remove("one");//删第一次出现的
a1.remove(0);//删指定下标的
a1.removeAll(a2);//差集
loop(a1);
//8.迭代器
Iterator<String> i=a1.iterator();
while(i.hasNext())
{
System.out.print(i.next()+" ");
}
System.out.println();
//9.模拟入栈出栈
a1.push("flora");
System.out.print("入栈后:");
loop(a1);
System.out.println("栈顶为:"+a1.pop());
System.out.print("出栈后:");
loop(a1);
//10.清空
a1.clear();
System.out.println(a1.isEmpty() ? "链表为空":"非空!");
}
static void loop(List<String> list)
{
for(String e:list)
{
System.out.print(e+" ");
}
System.out.println();
}
}
运行结果:
one two Three one null one a2-1 a2-2
true
true
one two Three one null one a2-1 a2-2
Three one null one
Three one null one
入栈后:flora Three one null one
栈顶为:flora
出栈后:Three one null one
链表为空