zoukankan      html  css  js  c++  java
  • 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
     
     
     
  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/yangyquin/p/5049163.html
Copyright © 2011-2022 走看看