List的三个子类特点
-
1.ArrayList
- 底层数据结构是数组,查询快,增删慢。
- 线程不安全,效率高 2.Vector
- 底层数据结构是数组,查询快,增删慢。
- 线程安全,效率低 3.LinkedList
- 底层数据结构是链表,查询慢,增删看。
- 线程不安全,效率高。 4.用哪个呢?
- 考虑,要安全吗?要安全也一般不用Vector。而用 Collections工具类的synchronizedList
- 查询多还是增删多?
//线程不安全
List<String> list1= new ArrayList<String>();
//线程安全
List<String> list2= Collections.synchronizedList( new ArrayList<String>());
ArraList
ArraList类是List接口的一个子类。
底层数据结构是数组。
删除中多了这个功能:
protected void removeRange(int fromIndex, int toIndex)
从这个列表中删除所有索引在 fromIndex (含)和 toIndex之间的元素。
创建并遍历ArrayList集合
1.存储字符串对象
import java.util.Iterator;
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args){
//创建集合
ArrayList l= new ArrayList();
//创建对象并添加到集合
l.add("you");
l.add("wanna");
l.add("help");
l.add("me");
l.add("the");
l.add("frosting");
//迭代器遍历
Iterator it= l.iterator();
while(it.hasNext()){
String s= (String)it.next();
System.out.print(s+" ");
}
System.out.println("");
//普通for遍历
for(int i=0; i<l.size();++i){
String s= (String)l.get(i);
System.out.print(s+" ");
}
}
}
2.存储自定义对象
//Student.java
public class Student {
// 姓名
private String name;
// 年龄
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class ArrayListDemo2 {
public static void main(String[] args) {
// 创建集合对象
ArrayList array = new ArrayList();
// 创建元素对象
Student s1 = new Student("曹操", 40);
Student s2 = new Student("蒋干", 30);
Student s3 = new Student("诸葛亮", 26);
// 添加元素
array.add(s1);
array.add(s2);
array.add(s3);
// 遍历:迭代器遍历
Iterator<Student> it = array.iterator();
while (it.hasNext()) {
Student s = it.next();
System.out.println(s.getName() + "---" + s.getAge());
}
System.out.println("------------------");
//普通for遍历
for (int x = 0; x < array.size(); x++) {
Student s = array.get(x);
System.out.println(s.getName() + "---" + s.getAge());
}
}
}
Vector
Vector类是List接口的一个子类。
底层数据结构是数组。
用List的方法就可以。
Linkedlist
Linkedlist类是List接口的一个子类。
底层数据结构是链表。
特有功能:
添加功能:
public void addFirst(E e):
public void addLast(E e) 相当于add()删除功能
public E removeFirst():从此列表中删除并返回第一个元素。(模拟栈的时候,是不是可以用此方法来模拟出栈呢?对的。弹出元素)
public E removeLast():删最后一个元素并返回- 获取功能
public E getFirst()返回此列表中的第一个元素。
public E getLast()获取最后一个元素