Java API —— ArrayList类 & Vector类 & LinkList类

1、ArrayList类
    1)ArrayList类概述
        · 底层数据结构是数组,查询快,增删慢
        · 线程不安全,效率高
    2)ArrayList案例
        · 存储字符串并遍历
        · 存储自定义对象并遍历
 
2、Vecor类
    1)Vector类概述
       · 底层数据结构是数组,查询快,增删慢
       · 线程安全,效率低
    2)Vector类特有功能
        · public void addElement(E obj):添加功能
        · public Object elementAt(int index):返回指定索引处的组件
        · public Enumeration elements():返回此向量的所有组件
    3)Vector案例
        · 存储字符串并遍历
        · 存储自定义对象并遍历
 
3、LinkedList类
    1)LinkedList类概述        
  · 底层数据结构是链表,查询慢,增删快        
  · 线程不安全,效率高    
  2)LinkedList类特有功能        
  · public void addFirst(Object e)及addLast(Object e):在开头处或结尾处添加        
  · public Object getFirst()及getLast():获取第一个或最后一个元素        
  · public Object removeFirst()及public Object removeLast():移除第一个或最后一个元素并返回被删除的元素    
  3)LinkedList案例
      · 存储字符串并遍历
      · 存储自定义对象并遍历
 
例子1:
package arraylistdemos;
import java.util.ArrayList;
import java.util.Iterator;
/**
 * Created by gao on 15-12-15.
 */
/*
 * List的子类特点:
 *         ArrayList:
 *             底层数据结构是数组,查询快,增删慢
 *             线程不安全,效率高
 *         Vector:
 *             底层数据结构是数组,查询快,增删慢
 *             线程安全,效率低
 *         LinkedList:
 *              底层数据结构是链表,查询慢,增删快
 *             线程不安全,效率高
 *
 * 案例:
 *         使用List的任何子类存储字符串或者存储自定义对象并遍历。
 *
 * ArrayList的使用。
 *         存储字符串并遍历
 */
public class ArrayListDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList  arrayList = new ArrayList();
        //创建元素对象,并添加元素
        arrayList.add("believe ");
        arrayList.add("in ");
        arrayList.add("yourself ");
        //遍历
        Iterator it = arrayList.iterator();
        while(it.hasNext()){
            String s = (String)it.next();
            System.out.println(s);
        }
        System.out.println("----------------------");
        for(int x = 0; x < arrayList.size(); x++){
            String s = (String)arrayList.get(x);
            System.out.println(s);
        }
    }
}

 

例子2:

package arraylistdemos;
import java.util.ArrayList;
import java.util.Iterator;
/**
 * Created by gao on 15-12-15.
 */
public class ArrayListDemo02 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList arrayList = new ArrayList();
        //创建学生对象
        Student s1 = new Student("武松", 30);
        Student s2 = new Student("鲁智深", 40);
        Student s3 = new Student("林冲", 36);
        Student s4 = new Student("杨志", 38);
        //添加元素
        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        arrayList.add(s4);
        //遍历
        Iterator it = arrayList.iterator();
        while (it.hasNext()) {
            Student s = (Student) it.next();
            System.out.println(s.getName() + "---" + s.getAge());
        }
        System.out.println("------------");
        for (int x = 0; x < arrayList.size(); x++) {
            Student s = (Student) arrayList.get(x);
            System.out.println(s.getName() + "---" + s.getAge());
        }
    }
}

   以上两个例子的添加和遍历方法对Vector和LinkedList都是可行的,下面讲解Vector特有的功能。

 
4、Vector的特有功能:
  1)添加功能
    public void addElement(Object obj) -- add()
  2)获取功能
    public Object elementAt(int index) -- get()
    public Enumeration elements() -- Iterator iterator()
    boolean hasMoreElements() -- hasNext()
    Object nextElement() -- next()
   3)JDK升级的原因:
     A:安全
     B:效率
     C:简化书写
 
例子3:
package vectordemos;
import java.util.Enumeration;
import java.util.Vector;
/**
 * Created by gao on 15-12-15.
 */
public class VectorDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        Vector v = new Vector();
        //添加功能
        v.addElement("hello");
        v.addElement("world");
        v.addElement("java");
        //遍历
        for(int x = 0; x < v.size(); x++){
            String s = (String) v.elementAt(x);
            System.out.println(s);
        }
        System.out.println("-------------");
        Enumeration e = v.elements();
        while(e.hasMoreElements()){
            String s = (String) e.nextElement();
            System.out.println(s);
        }
    }
}

 

5、LinkedList的特有功能:
        A:添加功能
            public void addFirst(Object e)
            public void addLast(Object e)
        B:获取功能
            public Object getFirst()
            public Obejct getLast()
        C:删除功能
            public Object removeFirst()
            public Object removeLast()
 
例子4:
package linklistdemos;
import java.util.LinkedList;
/**
 * Created by gao on 15-12-15.
 */
public class LinkListDemo01 {
    public static void main(String[] args) {
        // 创建集合对象
        LinkedList link = new LinkedList();
        // 添加元素
        link.add("hello");
        link.add("world");
        link.add("java");
        // public void addFirst(Object e)
        link.addFirst("javaee");
        // public void addLast(Object e)
        link.addLast("android");
        // public Object getFirst()
        System.out.println("getFirst:"+link.getFirst());
        // public Obejct getLast()
        System.out.println("getLast:"+link.getLast());
        System.out.println("link:"+link);
        // public Object removeFirst()
        System.out.println("removeFirst:"+link.removeFirst());
        // public Object removeLast()
        System.out.println("removeLast:"+link.removeLast());
        // 输出对象名
        System.out.println("link:"+link);
    }
}

输出结果:

getFirst:javaee
getLast:android
link:[javaee, hello, world, java, android]
removeFirst:javaee
removeLast:android
link:[hello, world, java]
 
6、实例应用:ArrayList去除集合中字符串的重复值(字符串的内容相同)
方式一:创建新的集合
package exercisedemos;
import java.util.ArrayList;
import java.util.Iterator;
/**
 * Created by gao on 15-12-15.
 */
/*
 * ArrayList去除集合中字符串的重复值(字符串的内容相同)
 *
 * 分析:
 *         A:创建集合对象
 *         B:添加多个字符串元素(包含内容相同的)
 *         C:创建新集合
 *         D:遍历旧集合,获取得到每一个元素
 *         E:拿这个元素到新集合去找,看有没有
 *             有:不搭理它
 *             没有:就添加到新集合
 *         F:遍历新集合
 */
public class Exercise01 {
    public static void main(String[] args) {
        // 创建集合对象
        ArrayList array = new ArrayList();
        // 添加多个字符串元素(包含内容相同的)
        array.add("hello");
        array.add("world");
        array.add("java");
        array.add("world");
        array.add("java");
        array.add("world");
        array.add("world");
        array.add("world");
        array.add("world");
        array.add("java");
        array.add("world");
        // 创建新集合
        ArrayList newArray = new ArrayList();
        // 遍历旧集合,获取得到每一个元素
        Iterator it = array.iterator();
        while(it.hasNext()){
            String s = (String) it.next();
            if(!newArray.contains(s)){
                newArray.add(s);
            }
        }
        Iterator it2 = newArray.iterator();
        while (it2.hasNext()){
            String s = (String) it2.next();
            System.out.println(s);
        }
    }
}

 方式二:不能创建新的集合

package exercisedemos;
import java.util.ArrayList;
/**
 * Created by gao on 15-12-15.
 */
/*
 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)
 * 要求:不能创建新的集合,就在以前的集合上做。
 */
public class Exercise02 {
    public static void main(String[] args) {
        // 创建集合对象
        ArrayList array = new ArrayList();
        // 添加多个字符串元素(包含内容相同的)
        array.add("hello");
        array.add("world");
        array.add("java");
        array.add("world");
        array.add("java");
        array.add("world");
        array.add("world");
        array.add("world");
        array.add("world");
        array.add("java");
        array.add("world");
        // 由选择排序思想引入,我们就可以通过这种思想做这个题目
        // 拿0索引的依次和后面的比较,有就把后的干掉
        // 同理,拿1索引...
        for (int x = 0; x < array.size() - 1; x++) {
            for (int y = x + 1; y < array.size(); y++) {
                if (array.get(x).equals(array.get(y))) {
                    array.remove(y);
                    y--; //注意删除后会有一个替位
                }
            }
        }
        for (int x = 0; x < array.size(); x++) {
            String s = (String) array.get(x);
            System.out.println(s);
        }
    }
}

 

7、实例应用:去除集合中自定义对象的重复值(对象的成员变量值都相同)
Student类:(重写equals方法)
package exercisedemos;
/**
 * Created by gao on 15-12-9.
 */
public class Student {
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        if (age != student.age) return false;
        if (!name.equals(student.name)) return false;
        return true;
    }
}

 测试类:

package exercisedemos;
import java.util.ArrayList;
import java.util.Iterator;
/**
 * Created by gao on 15-12-15.
 */
/*
 * 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)
 *
 * 我们按照和字符串一样的操作,发现出问题了。
 * 为什么呢?
 *         我们必须思考哪里会出问题?
 *         通过简单的分析,我们知道问题出现在了判断上。
 *         而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
 * contains()方法的底层依赖的是equals()方法。
 * 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法
 * Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。
 * 按照我们自己的需求,比较成员变量的值,重写equals()即可。
 * 自动生成即可。
 */
public class Exercise03 {
    public static void main(String[] args) {
        // 创建集合对象
        ArrayList array = new ArrayList();
        // 创建学生对象
        Student s1 = new Student("林青霞", 27);
        Student s2 = new Student("林志玲", 40);
        Student s3 = new Student("凤姐", 35);
        Student s4 = new Student("芙蓉姐姐", 18);
        Student s5 = new Student("翠花", 16);
        Student s6 = new Student("林青霞", 27);
        Student s7 = new Student("林青霞", 18);
        // 添加元素
        array.add(s1);
        array.add(s2);
        array.add(s3);
        array.add(s4);
        array.add(s5);
        array.add(s6);
        array.add(s7);
        // 创建新集合
        ArrayList newArray = new ArrayList();
        Iterator it = array.iterator();
        while (it.hasNext()) {
            Student s = (Student) it.next();
            if (!newArray.contains(s)) {
                newArray.add(s);
            }
        }
        for (int x = 0; x < newArray.size(); x++) {
            Student s = (Student)newArray.get(x);
            System.out.println(s.getName()+"---"+s.getAge());
        }
    }
}
输出结果:
林青霞---27
林志玲---40
凤姐---35
芙蓉姐姐---18
翠花---16
林青霞---18
 
8、实例应用:请用LinkedList模拟栈数据结构的集合,并测试
自定义Stack类:
package exercisedemos;
/**
 * Created by gao on 15-12-15.
 */
import java.util.LinkedList;
/**
 * 自定义的栈集合
 */
 public class MyStack {
    private LinkedList link;
    public MyStack(){
        link = new LinkedList();
    }
    public void add(Object obj){
        link.addFirst(obj);
    }
    //弹出并删除
    public Object get(){
       // return link.getFirst();
        return link.removeFirst();
    }
    public boolean isEmpty(){
        return link.isEmpty();
    }
}

 测试类:

package exercisedemos;
/**
 * Created by gao on 15-12-15.
 */
/*
 * MyStack的测试
 */
public class Exercise04 {
    public static void main(String[] args) {
        MyStack ms = new MyStack();
        ms.add("hello");
        ms.add("world");
        ms.add("java");
        while (!ms.isEmpty()){
            System.out.println(ms.get());
        }
    }
}
输出结果:
java
world
hello
 
 
 
posted @ 2015-12-15 19:03  我是一名老菜鸟  阅读(362)  评论(0编辑  收藏  举报