黑马程序员--Java集合框架(2)

来源:互联网 发布:工程量预算软件 编辑:程序博客网 时间:2024/06/03 19:16

——- android培训、java培训、期待与您交流! ———-

ArrayList

底层数据结构是数组,查询块,增删慢
线程不安全,效率高

ArrayList的使用
存储字符串并遍历

public class ArrayListDemo {    public static void main(String[] args) {        // 创建集合对象        ArrayList array = new ArrayList();        // 创建元素对象,并添加元素        array.add("hello");        array.add("world");        array.add("java");        // 遍历        Iterator it = array.iterator();        while (it.hasNext()) {            String s = (String) it.next();            System.out.println(s);        }        System.out.println("-----------");        for (int x = 0; x < array.size(); x++) {            String s = (String) array.get(x);            System.out.println(s);        }    }}

存储自定义对象并遍历
自定义对象

public class Student {    private String name;    private int age;    public Student() {        super();    }    public Student(String name, int age) {        super();        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;    }}

测试类

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

利用ArrayList集合去除字符串中的重复元素

import java.util.ArrayList;import java.util.Iterator;/* * ArrayList去除集合中字符串的重复值(字符串的内容相同) *  * 分析: *      A:创建集合对象 *      B:添加多个字符串元素(包含内容相同的) *      C:创建新集合 *      D:遍历旧集合,获取得到每一个元素 *      E:拿这个元素到新集合去找,看有没有 *          有:不搭理它 *          没有:就添加到新集合 *      F:遍历新集合 */public class ArrayListDemo {    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);            }        }        // 遍历新集合        for (int x = 0; x < newArray.size(); x++) {            String s = (String) newArray.get(x);            System.out.println(s);        }    }}

利用ArrayList集合去除重复自定义对象
自定义对象
需要重写equal()方法

public class Student {    private String name;    private int age;    public Student() {        super();    }    public Student(String name, int age) {        super();        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 obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Student other = (Student) obj;        if (age != other.age)            return false;        if (name == null) {            if (other.name != null)                return false;        } else if (!name.equals(other.name))            return false;        return true;    }}

测试类

import java.util.ArrayList;import java.util.Iterator;public class ArrayListDemo3 {    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());        }    }}

Vector

底层数据结构是数组,查询快,增删慢
线程安全,效率低

Vector的特有功能

import java.util.Enumeration;import java.util.Vector;/* * Vector的特有功能: * 1:添加功能 *      public void addElement(Object obj)       * 2:获取功能 *      public Object elementAt(int index)       *      public Enumeration elements()            *              boolean hasMoreElements()                *              Object nextElement()                     *  */public class VectorDemo {    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 en = v.elements(); // 返回的是实现类的对象        while (en.hasMoreElements()) {            String s = (String) en.nextElement();            System.out.println(s);        }    }

Vector中的addElement()相当于add()
elementAt()等同于get()
elements()等同于Iterator iterator()
hasMoreElements()等同于hasNext()
nextElement()等同于next()

JDK的升级放弃这些方法的使用,JDK升级以后简化了书写,而且更加安全,效率。

LinkedList

LinkedList特有功能

import java.util.LinkedList;/* * 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() */public class LinkedListDemo {    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());        // public Object removeFirst()        System.out.println("removeFirst:" + link.removeFirst());        // public Object removeLast()        System.out.println("removeLast:" + link.removeLast());        // 输出对象名        System.out.println("link:" + link);    }}

Arrays工具类

import java.util.Arrays;import java.util.List;/* * public static <T> List<T> asList(T... a):把数组转成集合 *  * 注意事项: *      虽然可以把数组转成集合,但是集合的长度不能改变。 */public class ArraysDemo {    public static void main(String[] args) {        // 定义一个数组        // String[] strArray = { "hello", "world", "java" };        // List<String> list = Arrays.asList(strArray);        List<String> list = Arrays.asList("hello", "world", "java");        // UnsupportedOperationException        // list.add("javaee");        // UnsupportedOperationException        // list.remove(1);        list.set(1, "javaee");        for (String s : list) {            System.out.println(s);        }    }}

集合的嵌套循环
每个班有学生,每一个学生是不是一个对象。所以我们可以使用一个集合表示我们班级的学生。ArrayList<Student>
但是呢,旁边还有班级,每个班级是不是也是一个ArrayList<Student>。
现在有多个ArrayList。就需要用嵌套循环。

学生类

public class Student {    private String name;    private int age;    public Student() {        super();    }    public Student(String name, int age) {        super();        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;    }}

测试类

import java.util.ArrayList;public class ArrayListDemo {    public static void main(String[] args) {        // 创建大集合        ArrayList<ArrayList<Student>> bigArrayList = new ArrayList<ArrayList<Student>>();        // 创建第一个班级的学生集合        ArrayList<Student> firstArrayList = new ArrayList<Student>();        // 创建学生        Student s1 = new Student("唐僧", 30);        Student s2 = new Student("孙悟空", 29);        Student s3 = new Student("猪八戒", 28);        Student s4 = new Student("沙僧", 27);        Student s5 = new Student("白龙马", 26);        // 学生进班        firstArrayList.add(s1);        firstArrayList.add(s2);        firstArrayList.add(s3);        firstArrayList.add(s4);        firstArrayList.add(s5);        // 把第一个班级存储到学生系统中        bigArrayList.add(firstArrayList);        // 创建第二个班级的学生集合        ArrayList<Student> secondArrayList = new ArrayList<Student>();        // 创建学生        Student s11 = new Student("诸葛亮", 30);        Student s22 = new Student("司马懿", 28);        Student s33 = new Student("周瑜", 26);        // 学生进班        secondArrayList.add(s11);        secondArrayList.add(s22);        secondArrayList.add(s33);        // 把第二个班级存储到学生系统中        bigArrayList.add(secondArrayList);        // 创建第三个班级的学生集合        ArrayList<Student> thirdArrayList = new ArrayList<Student>();        // 创建学生        Student s111 = new Student("宋江", 40);        Student s222 = new Student("吴用", 35);        Student s333 = new Student("高俅", 30);        Student s444 = new Student("李师师", 22);        // 学生进班        thirdArrayList.add(s111);        thirdArrayList.add(s222);        thirdArrayList.add(s333);        thirdArrayList.add(s444);        // 把第三个班级存储到学生系统中        bigArrayList.add(thirdArrayList);        // 遍历集合        for (ArrayList<Student> array : bigArrayList) {            for (Student s : array) {                System.out.println(s.getName() + "---" + s.getAge());            }        }    }}

总结

这里主要讲的集合有ArrayList,Vector,LinkedList三种集合,他们都是List接口的实现类。它们有各自不同的特点!
ArrayList

  • 底层数据结构是数组,查询快,增删慢。
  • 线程不安全,效率高。

Vector

  • 底层数据结构是数组,查询快,增删慢。
  • 线程安全,效率低。

LinkedList

  • 底层数据结构是链表,查询慢,增删快。
  • 线程不安全,效率高。

在使用的时候,怎么来选择呢?
看具体的需求来选择具体使用那个集合。
要安全吗?

  • 要:Vector
  • 不要:ArrayList或者LinkedList
    • 查询多;ArrayList
    • 增删多:LinkedList
0 0
原创粉丝点击