Collection下分为很多的子接口,其中有一个是List接口,List接口中可以存放任意的数据。而且在List接口中内容是允许重复的。List接口的功能比Collection接口强大很多,因为大量的扩充了Co11ection接口的操作。
No. | 方法 | 描述 |
1 | void add(int index, E element) | 在列表的指定位置插入指定元素(可选操作)。 |
2 | boolean addAll(Collection<? extends E> c) | 添加指定 collection中的所有元素到此列表的结尾,顺序是指定 collection的迭代器返回这些元素的顺序(可选操作)。 |
3 | boolean add(E e) | 向列表的尾部添加指定的元素(可选操作)。 |
4 | boolean addAll(int index, Collection<? extends E> c) | 将指定 collection中的所有元素都插入到列表中的指定位置(可选操作)。 |
5 | void clear() | 从列表中移除所有元素(可选操作)。 |
6 | boolean contains(Object o) | 如果列表包含指定的元素,则返回 true。 |
7 | boolean containsAll(Collection<?> c) | 如果列表包含指定 collection的所有元素,则返回 true。 |
8 | boolean equals(Object o) | 比较指定的对象与列表是否相等。 |
9 | E get(int index) | 返回列表中指定位置的元素。 |
10 | int hashCode() | 返回列表的哈希码值。 |
11 | int indexOf(Object o) | 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。 |
12 | boolean isEmpty() | 如果列表不包含元素,则返回 true。 |
13 | Iterator<E> iterator() | 返回按适当顺序在列表的元素上进行迭代的迭代器。 |
14 | int lastIndexOf(Object o) | 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。 |
15 | ListIterator<E> listIterator() | 返回此列表元素的列表迭代器(按适当顺序)。 |
16 | ListIterator<E> listIterator(int index) | 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。 |
17 | E remove(int index) | 移除列表中指定位置的元素(可选操作)。 |
18 | boolean remove(Object o) | 从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。 |
19 | boolean removeAll(Collection<?> c) | 从列表中移除指定 collection中包含的其所有元素(可选操作)。 |
20 | boolean retainAll(Collection<?> c) | 仅在列表中保留指定 collection中所包含的元素(可选操作)。 |
21 | E set(int index, E element) | 用指定元素替换列表中指定位置的元素(可选操作)。 |
22 | int size() | 返回列表中的元素数。 |
23 | List<E> subList(int fromIndex, int toIndex) | 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。 |
24 | Object[] toArray() | 返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素) |
25 | <T> T[] toArray(T[] a) | 返回按适当顺序(从第一个元素到最后一个元素)包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。 |
如果要想使用接口,则肯定要使用对象的多态性进行实例化的操作,那么对于List接口本身也是一样的,ArrayList是List中最常用的子类。
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Vector;
public class ArrayListDemo1 {
public static void main(String[] args) {
List<String> allList = null;
Collection<String> allCollection = null;
allList = new ArrayList<String>();// 指定操作泛型为String
System.out.println("集合操作前是否为空?" + allList.isEmpty());
// 屏幕显示:集合操作前是否为空?true
allCollection = new ArrayList<String>();// 指定一个集合
allList.add("Hello");// 此方法由Collection接口而来
allList.add(0, "World");// 在第一个位置添加新内容
System.out.println(allList);
// 屏幕显示:[World, Hello]
allCollection.add("aaa");
allCollection.add("www.baidu.com");
allList.addAll(allCollection);
allList.addAll(0, allCollection); // 在指定位置加入一组数据
System.out.println(allList);
System.out.println(allCollection);
// 屏幕显示:[aaa, www.baidu.com, World, Hello, aaa, www.baidu.com]
// 屏幕显示:[aaa, www.baidu.com]
/*
* 既然可以增加数据,那么就可以删除数据: List中存在两种删除:根据对象内容、根据对象的编号
*/
allList.remove(0);
System.out.println(allList);
// 屏幕显示:[www.baidu.com, World, Hello, aaa, www.baidu.com]
allList.remove("Hello");
System.out.println(allList);
// 屏幕显示:[www.baidu.com, World, aaa, www.baidu.com]
System.out.println("由前往后输出:");
/*
* 在List接口中提供了get()方法输出,循环次数由size()方法取得,此输出方式List接口独有,其他接口没有,
* 尤其是Collection中没有根据索引取出内容的操作
*/
for (int i = 0; i < allList.size(); i++)
System.out.println(allList.get(i) + "、");
// 屏幕显示:由前往后输出:
www.baidu.com、
World、
aaa、
www.baidu.com、
System.out.println("由后往前输出:");
for (int i = allList.size() - 1; i >= 0; i--)
System.out.println(allList.get(i) + "、");
// 屏幕显示:由后往前输出:
www.baidu.com、
aaa、
World、
www.baidu.com、
String str[] = allList.toArray(new String[] {});// 指定好类型
System.out.print("指定数组类型:");
for (int i = 0; i < str.length; i++)
System.out.print(str[i] + "、");
// 屏幕显示:指定数组类型:www.baidu.com、World、aaa、www.baidu.com、
System.out.print("\n返回对象数组:");
Object obj[] = allList.toArray();// 返回Object类型
for (int i = 0; i < obj.length; i++) {
String temp = (String) obj[i];
System.out.print(temp + "、");
}
// 屏幕显示:返回对象数组:www.baidu.com、World、aaa、www.baidu.com、
// 查找是否存在:boolean contains(Object o)
System.out.println(allList.contains("Hello") ? "\"Hello\"字符串存在!" : "\"Hello\"字符串不存在!");
// 屏幕显示:"Hello"字符串不存在!
// 截取部分集合:List<E> subList(int fromIndex, int toIndex),List接口扩充
List<String> allSub = allList.subList(2, 4);// 字符串截取
System.out.println("集合截取:");
for (int i = 0; i < allSub.size(); i++) {
System.out.print(allSub.get(i) + "、");
}
System.out.println();
// 查找指定对象是否存在:int indexOf(Object o),如果查找到则返回位置,否则返回-1.
System.out.println("baidu字符串的位置:" + allList.indexOf("baidu"));
// 判断集合是否为空:boolean isEmpty()
System.out.println("集合操作后是否为空?" + allList.isEmpty());
/*
* 以上操作都是使用ArrayList子类完成的。
*/
/*
* 因为Vector类本身属于旧的类,所以在类中也提供了很多重复的方法。 增加元素: public void addElement(E
* obj)→此方法是最早的增加元素的操作,之后此方法的功 能与add()方法是一致的。
*/
// List<String>allList2=null;(使用List不能用addElement()函数)
Vector<String> allList2 = null;
allList2 = new Vector<String>();
allList2.addElement("zhangsan");
allList2.addElement("lisi");
allList2.add("wangwu");
for (int i = 0; i < allList2.size(); i++)
System.out.print(allList2.get(i) + "、");
}
}
No. | 比较点 | ArrayList | Vector |
1 | 推出时间 | JDK1.2之后推出的新操作类 | JDK1.0推出的老操作类 |
2 | 性能 | 采用异步处理方式,性能更高 | 采用同步处理方式,性能较低 |
3 | 线程安全 | 属于非线程安全的操作类 | 属于线程安全的操作类 |
4 | 输出 | 智能使用Iterator、foreach输出 | 可用Iterator、foreach、Enumeration输出 |