List集合接口、ArrayList集合、linkedList集合、vector集合
List集合接口
java.util.collection集合(接口)常用的两个子类集合java.util.List集合(接口)和java.util.Set集合(接口)
java.util.List接口 extends collection接口
List接口的特点:
1.有序的集合(也称为序列),存储元素和取出元素的顺序是一致的
2.有索引,包含了一些带索引的方法
3.与set集合不同,允许存储重复的元素。
List接口中带索引的方法(特有)
void add(int index, E element);//在特定索引处添加数据,后面索引的数据向后移动一位
E get(int index);//返回指定索引的元素
E remove(int index)//删除指定索引的元素,后面元素索引向前移动一位,同时返回删除的元素
E set(int index, E element);//替换指定索引的元素,并返回被替换的元素
注意:操作索引的时候,一定要防止索引越界异常。
package mycollection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//测试List集合中特有的操作索引来控制元素的方法
public class TestList01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
System.out.println(list);//[a, b, c, d, e]
//void add(int index, E element);//在特定索引处添加数据,后面索引的数据向后移动一位
//在b与c之间插入“哈”
list.add(2,"哈");
System.out.println(list);//[a, b, 哈, c, d, e]
//E get(int index);//返回指定索引的元素
//获取List集合中最后一个元素
String end = list.get(list.size() - 1);
System.out.println(end);//e
//E remove(int index)//删除指定索引的元素,后面元素索引向前移动一位,同时返回删除的元素
String remove = list.remove(2);//跟boolean remove = list.remove("哈");差不多,只不过返回值不一样
System.out.println(remove);//哈
System.out.println(list);//[a, b, c, d, e]
//E set(int index, E element);//替换指定索引的元素,并返回被替换的元素
//将C替换成“替”
String replace = list.set(2, "替");
System.out.println(replace);
System.out.println(list);
//注意:操作索引的时候,一定要防止索引越界异常。
//list.get(5);//抛出IndexOutOfBoundsException,索引越界异常
//对List遍历的三种方法
//普通for循环
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+"\t");
}
System.out.println();
//使用迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next()+"\t");
}
System.out.println();
//增强for循环
for (String s : list) {
System.out.print(s+"\t");
}
}
}
List集合接口的实现子类java.util.ArrayList集合(最常用的List集合)
java.util.ArrayList集合底层是一个数组结构,元素增删慢,查找快
ArrayList集合适合多查找,少增删的操作
java.util.linkedList集合implements List 接口
Linklist集合特点:(包含List集合特点)
1.底层是一个连表结构:查询慢,增删快
2.里面包含了大量操作首尾元素的方法
注意:使用Linklist集合特有的方法,不能使用多态
public void addFirst(E e)//在列表开头插入指定元素
public void push(E e)//将元素推入列表(两者相同)
public void addLast(E e)//在列表结尾插入指定元素
public E getFirst()//获取列表开头元素
public E getLast() //获取列表结尾元素
public E removeFirst()//移除并返回第一个元素
public E pop()//移除并返回此列表的第一个元素。(两者相同)
public E removeLast()//移除并返回最后一个元素
public boolean isEmpty()//判断集合是否为空
package mycollection;
import java.util.LinkedList;
public class TestLinkedList01 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
System.out.println(list);//[a, b, c, d, e]
list.addFirst("哈哈");// list.push("哈哈");两者效果相同
list.addLast("哦哦");
System.out.println(list);//[哈哈, a, b, c, d, e, 哦哦]
System.out.println(list.getFirst());//哈哈
System.out.println(list.getLast());//哦哦
System.out.println(list.removeFirst());//哈哈//相当于System.out.println(list.pop());
System.out.println(list);//[a, b, c, d, e, 哦哦]
System.out.println(list.removeLast());//哦哦
System.out.println(list);//[a, b, c, d, e]
System.out.println(list.isEmpty());//false
list.clear();
System.out.println(list.isEmpty());//true
}
}