Java集合框架

来源:互联网 发布:蒙牛微销售打卡软件 编辑:程序博客网 时间:2024/05/31 13:15
一、链表
    1.为什么要使用链表?
        数组和数组列表存在重大缺陷:如果想从数组中间位置添加或删除一个元素需要付出很大代价,
        因为数组中处于被删除元素之后的所有元素都要向数组的前端移动。数组中插入一个元素也是如此。
        而使用链表可以解决这个问题。
        数组在连续的存储位置上存放对象引用,但链表却将每个对象存放在独立的结点中,每个结点还
        存放着序列的下一个结点的引用。在java中链表都是双向的——即每个结点都还存放着指向前驱结点
        的引用。
    
    2.链表是一个有序集合,每个对象的位置十分重要,使用LinkedList.add方法只能添加到链表的尾部,有
    但是常常需要将元素插入到链表的中间,集合类库中提供了子接口ListIterator,其中包含add方法。
    
    向链表中插入元素
        List<String> staff = new LinkedList<>();
        staff.add("Amy");
        staff.add("Bob");
        staff.add("Car");
        ListIterator<String> it = staff.listIterator();
        it.next();
        it.add("Julin");
        for(String s : staff) {
            System.out.println(s);
        }
    如果链表中有n个元素,可以在n+1个位置进行插入新的元素。例:
    |ABCD
    A|BCD
    AB|CD
    ABC|D
    ABCD|
    |表示插入的位置

    删除链表中的元素
        Java集合类库中提供了一个LinkedList表示链表。

        List<String> staff = new LinkedList<>();
        staff.add("Amy");
        staff.add("Bob");
        staff.add("Car");
        Iterator<String> it = staff.iterator();
        String first = it.next();
        String second = it.next();
        it.remove();
        System.out.println("first : "+first);
        System.out.println("second : "+second);
        for(String s : staff) {
            System.out.println(s);
        }

        输出的结果为:
        first : Amy
        second : Bob
        Amy
        Car

    替换指定位置的元素
        在链表中ListIterator中提供了set方法,可以替换指定位置的元素
        ListIterator<String> it = staff.listIterator();
        it.next();
        it.set(newValue);

    3.链表不支持快速的随机访问,如果要访问第n个元素,就必须从头开始越过n-1个元素

二、数组列表(ArrayList)
    ArrayList和Vector:
        Vector类的所有方法都是同步的,可以由多个线程访问一个Vector对象,但是由一个线程访问时
        同步操作会耗费大量的时间。因此在不需要同步的时候使用ArrayList。

三、散列集
    链表和数组可以按照意愿排列次序。但是如果想要查看某个指定的元素,却又忘记了它所在的位置,就需要
    访问所有的元素。
    HashSet无序不重复的。

四、树集
    TreeSet树集是一个有序集合,可以以任意顺序将元素插入集合中。在对集合进行遍历时,每个值将自动
    的按照排序之后的顺序呈现。
    SortedSet<String> set = new TreeSet<>();
    set.add("Bob");
    set.add("Amy");
    set.add("Car");
    for(String s : set) {
        System.out.println(s);
    }

    将一个元素添加到树中比添加到散列表中要慢,但是与将元素添加到数组或链表的正确位置上相比还是快得多。
原创粉丝点击