java.util.List接口 extends Collection接口
List接口的特点:
1.有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
2.有索引,包含了一些带索引的方法
3.允许存储重复的元素
List接口中带索引的方法(特有):
public void add(int index, E element) :将指定的元素,添加到该集合中的指定位置上
public E get(int index) :返回集合中指定位置的元素
pubic E remove(int index) :移除列表中指定位置的元素,返回的是被移除的元素
public E set(int index, E element) :用指定元素替代集合中指定位置的元素,返回值的更新前的元素
注意:
操作索引的时候,一定要防止索引越界引起的异常
IndexOutOfBoundException:索引越界异常,集合会报
ArrayIndexOutOfBoundException: 数组索引越界异常
StringIndexOutOfBoundException :字符串索引越界异常
public class Demo01List{
public static void main(String[] args){
//创建一个List集合对象,多态
List<String> list = new ArrayList<>();
//添加元素
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("a");
//打印集合
System.out.println(list);//[a,b,c,d,a] 不是地址,说明重写了toString
//public void add(int index, E element) :将特定的元素,添加到该集合中的指定位置上
//在c和d之间添加一个itheima
list.add(3,"itheima");
System.out.println(list);//[a,b,c,itheima,d,a]
//public E remove(int index) :移除列表中指定位置的元素,返回的是被移除的元素
String rm = list.remove(2);
System.out.println(rm);//c
System.out.println(list);//[a,b,itheima,d,a]
//public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素
//把最后一个a替换为A
String se = list.set(4,A);
System.out.println("被替换的元素:"+se);//被替换的元素:a
System.out.println(list);//[a,b,itheima,d,A]
//List集合有三种遍历方式
//使用普通的for循环
for(int i=0;i<list.size();i++){
//public E get(int index) :返回指定位置的元素
Strnig ge = list.get(i);
System.out.println(ge);
}
//使用迭代器遍历
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s= it.next();
System.out.println(s);
}
//使用增强for循环遍历
for(String s :list){
System.out.println(s);
}
}
}
TIPS:
java.util.ArrayList 集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种方法是不提倡的
java.util.LinkedList集合 implements List接口
LinkedList集合的特点;
1.底层是一个链表结构:查询慢,增删快
2.里面包含了大量操作首尾元素的方法
注意:使用LinkedList集合特有的方法,不能使用多态
public void addFirst(E e) :将指定的元素插入此列表的开头
public void addLast(E e) :将指定元素添加到此列表的结尾
public void push(E e) :将元素推入此列表所表示的堆栈
public E getFirst() :返回此列表的第一个元素
public E getLast() :返回此列表的最后一个元素
public E removeFirst() :移除并返回此列表的第一个元素
public E removeLast() :移除并返回此列表的最后一个值
public E pop() :从此列表所表示的堆栈处弹出一个元素
public boolean isEmpty() :如果列表不包含元素,则返回true
public class Demo02LinkedList{
public static void main(String[] args){
show01();
}
private static void show01(){
//创建LinkedList集合对象
LinkedList<String> linked = new LinkedList<>();
//使用add方法往集合中添加元素
linked.add("a");
linked.add("b");
linked.add("c");
System.out.println(linked);//[a,b,c]
//public void addFirst(E e) :将指定元素插入此列表的开头
linked.addFirst("www");//
//linked.push("www");功能和addFirst一样
System.out.println(linled);//[www,a,b,c]
//public void addLast(E e) :将指定元素添加到此列表的结尾,此方法等效于add();
linked.addLast("com");
System.out.println(linked);//[www,ab,c,com]
}
private static void show02(){
//创建LinkedList集合对象
LinkedList<String> linked = new LinkedList<>();
//使用add方法往集合中添加元素
linked.add("a");
linked.add("b");
linked.add("c");
//**linked.clear()**;是清空集合中所有的元素,再用放过获取集合中的元素就会抛出异常NoSuchElemnetException
//public boolean isEmpty() :如果列表不包含元素,则返回true
if(!linked.isEmpty()){
String first = linked.getFirst();
System.out.println(first);//a
String last = linked.getLsat();
System.out.println(last);//c
}
}
private static void show03(){
//创建LinkedList集合对象
LinkedList<String> linked = new LinkedList<>();
//使用add方法往集合里添加元素
linked.add("a");
linked.add("b");
linked.add("c");
System.out.println(linked);
String first = linked.removeFirst();
System.out.println("被移除的第一个元素:"+first);//被移除的第一个元素:a 此方法等效于 public E pop()方法
}
}