黑马程序员------集合框架(No.2)(ArrayList、LinkedList、vector)

来源:互联网 发布:excel数据如何恢复 编辑:程序博客网 时间:2024/05/01 00:09

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------- 

微笑List集合对象的特点:

 

List:

 |----List:元素是有序的,元素可以重复。因为该集合体系有索引。

           |----ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增、删稍慢(涉及下标的改变)。线程不同步。

           |----LinkedList:底层使用的链表数据结构。特点:增删的速度很快,查询的速度稍慢。

           |----vector:底层是数组数据结构。出现的早,在集合框架出现之前。无论增删还是查询都慢,被ArrayList淘汰,线程同步。

 

有关Vector的程序

import java.util.*;/*枚举就是Vector特有的取出方式。枚举和迭代器很像枚举和迭代是一样的。因为枚举的名称和方法的名称都过长,所以被迭代器取代了,枚举就沉默了。*/class VectorDemo{public static void main(String[] args){Vector v = new Vector();v.add("java01");v.add("java02");v.add("java03");v.add("java04");Enumeration en = v.elements();while(en.hasMoreElements()){System.out.println(en.nextElement());}}}


有关LinkedList的程序

 

LinkedList特有方法


addFirst();
addLast();

 

获取元素,但不删除元素,如果集合中没有元素,会出现NoSuchElementException
getFirst();
getLast();

 

获取元素,但删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();

 

在JDK1.6出现了替代方法


添加元素
offerFirst();
offerLast();

 

获取元素,但不删除元素。如果集合中没有元素,会返回null;
peekFirst();
peekLast();

 

获取元素,但是会删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();

class LinkedListDemo{public static void main(String[] args){LinkedList link = new LinkedList();link.addFirst("java01");link.addFirst("java02");link.addFirst("java03");link.addFirst("java04");link.addFirst("java00");link.addLast("java05");link.offerFirst("java007");sop(link);sop(link.removeFirst());//遍历while(!link.isEmpty()){sop(link.removeFirst());}}public static void sop(Object obj){System.out.println(obj);}}


使用LinkedList模拟一个堆栈或者队列数据结构。

 

堆栈:先进后出,如同水杯。

队列:先进先出,如同水管。First in First out  ----  FIFO。

import java.util.*;class Duilie{private  LinkedList link ; //构造函数初始化的时候,建立一个链表。Duilie(){link = new LinkedList();}//每次都像头部添加元素public  void myAdd(Object obj){link.offerFirst(obj);}//保证从尾部取出元素public  Object myGet(){return link.pollLast();}public  boolean isNull(){return link.isEmpty();}}class DuilieDemo{public static void main(String[] args){Duilie d = new Duilie();d.myAdd("java00");d.myAdd("java01");d.myAdd("java02");d.myAdd("java03");while(!d.isNull()){System.out.println(d.myGet());}}}

将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
 

import java.util.*;/*将自定义对象作为元素存到ArrayList集合中,并去除重复元素。比如:存人对象。同名同年龄,视为同一个人。为重复元素思路:1.对人描述2.定义容器,将人存入。3.取出*/class Person{private String name;private int age;Person(String name,int age){this.name = name;this.age = age;}public String getName(){return name;}public int getAge(){return age;}public String toString(){return "("+name+":"+age+")";}//重写equals方法是因为ArrayList的contains方法的底层是由equals方法实现的。public boolean equals(Object obj){if(!(obj instanceof Person))return false;Person p = (Person)obj;return this.name.equals(p.name)&&this.age==p.age;}}class ArrayListDemo{public static void sop(Object obj){System.out.println(obj);}//实现ArrayList元素的过滤。public static ArrayList singleElement(ArrayList list){ArrayList newList = new ArrayList();Iterator it = list.iterator();while(it.hasNext()){Person p = (Person)it.next();if(!newList.contains(p)){newList.add(p);}}return newList;}public static void main(String[] args){ArrayList a = new ArrayList();//添加对象a.add(new Person("zhangsan",10));a.add(new Person("lisi",14));a.add(new Person("zhangsan",10));a.add(new Person("zhaoliu",12));a.add(new Person("lisi",14));a.add(new Person("lisi",14));sop(a);sop(singleElement(a));}}


---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 

详情请查看:http://edu.csdn.net

 

原创粉丝点击