List接口及其常用子类
List中可以保存各个重复的内容。接口定义:public interface List<E> extends Collection<E>
List继承Collection接口并大量扩充了Collection接口,拥有了更多的方法定义。
下面介绍List常用的子类:
1、ArrayList
定义: public class ArrayList<E> extends AbstractList<E> implements List<E>,
public class AbstractList<E> extends AbstractCollection<E> implements List<E>
(1)向集合中添加元素:
add():向list集合中添加元素;
add(int index,E element):向集合指定位置添加元素;
addAll(int index,Collection<?> c):向集合指定位置添加一组对象
例子:
public class ArrayListDemo01 {
public static void main(String[] args){
List<Object> list = new ArrayList<Object>();
List<String> list1 = new ArrayList<String>();
list.add("Hello World");
System.out.println(list);
list.add(0, 123);
System.out.println(list);
list1.add("456");
list1.add("789");
list.addAll(list1);
System.out.println(list);
System.out.println(list.size());
}
}
输出结果为:
[Hello World]
[123, Hello World]
[123, Hello World, 456, 789]
4
(2)、删除集合中的元素:
add()方法一次只添加一个元素,多个元素添加会多次调用add(),每个元素之间用","隔开存储,一个元素之内可以有","(在于定义的LIst类型);
remove(int index):删除某个位置的元素;
remove(E element):删除某个元素;
removeAll(Collection<?> c):删除一组对象
例:
public class ArrayListDemo02 {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("123,Hello World");
System.out.println(list);
System.out.println(list.size());
// list.remove(1); 错误,此list总共只有一个长度,存储位置为0
// list.remove("123"); 错误,"123,Hello World"为一个元素,不能删除某一元素的一部分
list.add(0,"456");
list.remove(1);
System.out.println(list);
System.out.println(list.size());
list.remove("456");
System.out.println(list);
System.out.println(list.size());
}
}
输出结果为:
[123,Hello World]
1
[456]
1
[]
0
(3)集合的其他相关操作:
List中还存在截取集合、查找元素位置、判断元素是否存在、判断集合是否为空
public class ArrayListDemo03 {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
System.out.println("集合是否为空?" + list.isEmpty());
list.add("Hello");
list.add("World");
list.add(0, "123");
System.out.println(list.contains("Hello") ? "\"Hello\"字符串存在!" : "\"Hello\"字符串不存在!");
List<String> subList = list.subList(1,2);//截取集合
System.out.println("集合截取:"+subList);
System.out.println("123字符的位置:"+list.indexOf("123"));
}
}
输出结果为:
集合是否为空?true
"Hello"字符串存在!
集合截取:[Hello]
123字符的位置:0
(4)集合的输出:
我们将在后续文章中讲解
2、Vector
List接口中还有一个子类:Vector,他是一个挽救的子类,
定义:public class Vector<E> extends AbstractList<E> implements List<E>
List<String> list = new Vector<String>();
list.add();
Vector<String> list1 = new Vector<String>();
list1.addElement();
使用上和ArrayList没有太大的区别。
ArrayList与Vector的比较:
对比 | 推出时间 | 性能 | 线程安全 |
ArrayList | 新,JDK1.2后 | 异步处理, 高性能 | 非线程安全 |
Vector | 旧,JDK1.0时 | 同步处理, 低性能 | 线程安全 |
3、LinkedList子类与Queue接口
LinkedList表示的是一个链表的操作类,此类实现了List同时也实现了Queue接口,先进先出。
(1)在链表的开头和结尾增加数据,为了达到链表的目的,必须使用LinkedList类
public class LinkedListDemo01 {
/**
* LinkedList类,对链表增加数据
*/
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
System.out.println("初始化链表:"+link);
link.addFirst("X");//在链表头增加内容
link.addLast("Y");//在链表尾部增加内容
System.out.println("增加头尾之后的链表:"+link);
}
}
输出结果:
初始化链表:[A, B, C]
增加头尾之后的链表:[X, A, B, C, Y]
(2)找到链表的头
public class LinkedListDemo02 {
/**
* 找到标头的方式
*/
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
System.out.println("创建的链表"+link);
System.out.println("1.element方法找到表头:"+link.element());
System.out.println("找完之后的链表:"+link);
System.out.println("2.peek方法找到表头:"+link.peek());
System.out.println("找完之后的链表:"+link);
System.out.println("3.poll方法找到表头:"+link.poll());
System.out.println("找完之后的链表:"+link);
}
}
输出结果:
创建的链表[A, B, C]
1.element方法找到表头:A
找完之后的链表:[A, B, C]
2.peek方法找到表头:A
找完之后的链表:[A, B, C]
3.poll方法找到表头:A
找完之后的链表:[B, C]
(3)先进先出的方式取出全部数据
public class LinkedListDemo03 {
/**
* 以先进先出的方式取出全部数据
*/
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
System.out.println(link);
System.out.println("以FIFO方式输出:");
for(int i=0;i<link.size()+2;i++){
System.out.print(link.poll()+"、");
}
}
}
输出结果:
[A, B, C]
以FIFO方式输出:
A、B、C、
在List 接口中实际开发用的较多的是ArrayList类。
下文讲解类集中Set接口的使用。