您当前的位置: 首页 >  Java

彭世瑜

暂无认证

  • 0浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java学习路线-35:List集合

彭世瑜 发布时间:2020-01-04 21:45:59 ,浏览量:0

第29 章 : List集合 125 List接口简介

允许保存重复数据

List新的方法

E get(int index);
E set(int index, E element);
ListIterator listIterator();

三个常用子类

ArrayList  90%
Vector     8%
LinkedList 2% 

定义

public class ArrayList 
    extends AbstractList
    implements List, RandomAccess, Cloneable, java.io.Serializable

public class Vector
    extends AbstractList
    implements List, RandomAccess, Cloneable, java.io.Serializable

public class LinkedList
    extends AbstractSequentialList
    implements List, Deque, Cloneable, java.io.Serializable

126 ArrayList子类

继承结构

@Iterable
    -@Collection
        -@List


AbstractCollection(Collection)
    - AbstractList(List)
        -ArrayList(List, RandomAccess, Cloneable, java.io.Serializable)

List特征 1、保存顺序就是存储顺序 2、允许有重复数据

JDK >= 1.8 Iterable接口中有forEach方法

import java.util.ArrayList;
import java.util.List;

class Demo{
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        System.out.println(list);
        // [Hello, Hello, World]

        list.forEach((str)->{
            System.out.println(str);
        });
        /**
         * Hello
         * Hello
         * World
         */
        System.out.println(list.size());  // 3
        System.out.println(list.isEmpty());  // false
    }
}

ArrayList 实际包含一个对象数组 默认使用空数组 添加新元素时,如果长度不够,会开辟一个新的数组

版本不一样实现也不一样 JDK < 1.9 默认使用长度为10的数组 JDK >= 1.9 默认空数组

如果超过10个数据,考虑使用有参构造,避免垃圾数组的产生

127 ArrayList保存自定义类对象

如果需要remove,contains方法,要覆写equals方法

import java.util.ArrayList;
import java.util.List;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (obj == this) {
            return true;
        }
        if (!(obj instanceof Person)) {
            return false;
        }
        Person other = (Person) obj;

        return this.name.equals(other.name) && this.age == other.age;

    }

}

class Demo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Person("Tom", 23));
        list.add(new Person("Jack", 24));
        list.add(new Person("Steve", 25));

        System.out.println(list.contains(new Person("Tom", 23)));
        // true
    }
}
128 LinkedList子类

继承关系

@Iterable
    -@Collection
        -@List

AbstractCollection(Collection)
    -AbstractList(List)
        -AbstractSequentialList
            -LinkedList(List, Deque, Cloneable, java.io.Serializable)

代码实例

import java.util.LinkedList;
import java.util.List;

class Demo{
    public static void main(String[] args) {
        List list = new LinkedList();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        System.out.println(list);
        // [Hello, Hello, World]

        list.forEach(System.out::println);
        /**
         * Hello
         * Hello
         * World
         */
    }
}

LinkedList和ArrayList接口一致,实现不一样 区别:

ArrayList   数组实现 get查找复杂度为O(1) 
LinkedList  链表实现 get查找复杂度为O(n)

ArrayList默认初始化大小为10,长度会自动扩容,保存大数据会产生垃圾,这时使用LinkedList

129 Vector子类

Vector和ArrayList继承关系一致

Vector 的方法加了同步处理synchronized ,多线程安全,性能不如ArrayList

import java.util.List;
import java.util.Vector;

class Demo{
    public static void main(String[] args) {
        List list = new Vector();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        System.out.println(list);
        // [Hello, Hello, World]

        list.forEach(System.out::println);
        /**
         * Hello
         * Hello
         * World
         */
    }
}

总结

集合说明ArrayList数组实现,读>写Vector数组实现,线程安全LinkedList链表实现,写>读

继承关系

@Iterable
    -@Collection
        -@List


AbstractCollection(Collection)
    - AbstractList(List)
        -ArrayList(List, RandomAccess, Cloneable, java.io.Serializable)
        -Vector(List, RandomAccess, Cloneable, java.io.Serializable)
        -AbstractSequentialList
            -LinkedList(List, Deque, Cloneable, java.io.Serializable)
关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.1426s