List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector类概述
Vector 类可以实现可增长的对象数组 , Vector 是同步的。
Vector类特有功能
public void addElement(E obj)将指定的组件添加到此向量的末尾,将其大小增加 1-----add取代 如果向量的大小比容量大,则增大其容量。 此方法的功能与 add(E) 方法的功能完全相同(后者是 List 接口的一部分)。
public E elementAt(int index)返回指定索引处的组件。 此方法的功能与 get(int) 方法的功能完全相同(后者是 List 接口的一部分)。—get取代
E firstElement ()返回此向量的第一个组件(位于索引 0)处的项)。
E lastElement ()返回此向量的最后一个组件。
void removeAllElements () 从此向量中移除全部组件,并将其大小设置为零
public Enumeration elements()返回此向量的组件的枚举返回的 Enumeration 对象将生成此向量中的所有项。
Vector vector = new Vector();
//添加元素
vector.add("aaa");
vector.add("bbb");
vector.add("ccc");
vector.addElement("fff");
vector.add("eeee");
//System.out.println(vector);
/* void addElement (E obj)
将指定的组件添加到此向量的末尾,将其大小增加 1。
E elementAt ( int index)
返回指定索引处的组件。
E firstElement ()
返回此向量的第一个组件(位于索引 0)处的项)。
E lastElement ()
返回此向量的最后一个组件。
void removeAllElements ()
从此向量中移除全部组件,并将其大小设置为零*/
Object o = vector.get(0);
Object o1 = vector.elementAt(0);
// System.out.println(o);
// System.out.println(o1);
// Object o2 = vector.firstElement();
// Object o3 = vector.lastElement();
// System.out.println(o2);
// System.out.println(o3);
//用for遍历
for (int i = 0; i < vector.size(); i++) {
// System.out.println(vector.get(i));
// System.out.println(vector.elementAt(i));
}
//Vector 自带的迭代器 Enumeration
Enumeration elements = vector.elements();
while(elements.hasMoreElements()){
Object o4 = elements.nextElement();
if(o4.equals("aaa")){
vector.add("ggg");//Vector 类可以实现可增长的对象数组 , Vector 是同步的。
}
System.out.println(o4);
}
}
}
LinkedList类概述
List 接口的链接列表实现 , 此实现不是同步的
LinkedList类特有功能
public void addFirst(E e)及addLast(E e)
public E getFirst()及getLast()
public E removeFirst()及public E removeLast()
E peek ()获取但不移除此列表的头(第一个元素)
E poll ()获取并移除此列表的头(第一个元素)
//LinkedList 底层数据结构是链表,查询慢,增删快 ,线程 不安全,效率高
LinkedList linkedList = new LinkedList();
// linkedList.add(100);
// linkedList.add(200);
linkedList.addLast(9901);
linkedList.addLast(9902);
linkedList.addLast(9903);
linkedList.addLast(9904);
// linkedList.add(300);
linkedList.addFirst(600); //往最前面加
linkedList.addFirst(601); //往最前面加
linkedList.addFirst(602); //往最前面加 linkedList.addFirst(600); //往最前面加
System.out.println(linkedList);
System.out.println("===========================");
Object first = linkedList.getFirst();
System.out.println(first);
Object last = linkedList.getLast();
System.out.println(last);
// linkedList.removeFirst();
// linkedList.removeLast();
/* E peek ()
获取但不移除此列表的头(第一个元素)。*/
Object peek = linkedList.peek();
System.out.println(peek);
/* E poll ()
获取并移除此列表的头(第一个元素)*/
Object poll = linkedList.poll();
Object poll2 = linkedList.poll();
Object poll3 = linkedList.poll();
System.out.println(linkedList);
用LinkedList模拟栈数据结构的集合
public class MyList {
LinkedList linkedList;
public MyList(){
linkedList= new LinkedList();
}//利用构造方法进行初始化
public void addEle(Object ele) {
//100 200
linkedList.addFirst(ele);
}
public Object getEle() {
Object pop = linkedList.pop();
linkedList.addLast(pop);
return pop;
}
public class MyTest {
public static void main(String[] args) {
/* A:
案例演示:
需求:请用LinkedList模拟栈数据结构的集合,并测试*/
//栈的数据结构是先进后出,后进先出
/* ArrayList list = new ArrayList();
list.add(100);
list.add(400);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
*/
MyList myList = new MyList();
myList.addEle(100);
myList.addEle(200);
myList.addEle(300);
Object ele = myList.getEle();
System.out.println(ele);
ele = myList.getEle();
System.out.println(ele);
ele = myList.getEle();
System.out.println(ele);
}
}