• 单列集合


    一、集合和数组既然都是容器,它们的区别:

      1. 数组的长度是固定的。集合的长度是可变的

      2. 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储

    二、集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map

    Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.Listjava.util.Set。其中,List的特点是元素有序、元素可重复。Set的特点是元素无序,而且不可重复。List接口的主要实现类有java.util.ArrayListjava.util.LinkedListSet接口的主要实现类有java.util.HashSetjava.util.TreeSet

    Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。方法如下:
    public boolean add(E e):把给定的对象添加到当前集合中 
    public void clear():清空集合中所有的元素
    public boolean remove(E e): 把给定的对象在当前集合中删除。
    public boolean contains(E e): 判断当前集合中是否包含给定的对象。
    public boolean isEmpty(): 判断当前集合是否为空。
    public int size(): 返回集合中元素的个数。
    public Object[] toArray(): 把集合中的元素,存储到数组中。

    三、List接口

    特点:①有序 ②有索引 ③允许存储重复元素

    List接口中带索引的方法(特有):
    public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
    public E get(int index):返回集合中指定位置的元素。
    public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
    public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

    注意: 操作索引的时候,一定要防止索引越界异常,IndexOutOfBoundsException:索引越界异常,集合会报 ArrayIndexOutOfBoundsException:数组索引越界异常 StringIndexOutOfBoundsException:字符串索引越界异常。

    List接口的实现类:

      1. ArrayList,底层是数组结构。元素增删慢,查寻快

      2.LinkedList,底层链表结构。元素增删快,查询慢 ;里面包含了大量操作首尾的方法

      3.Vector,底层是数组结构,Vector是同步的,即单线程、速度慢,而ArrayList不是同步的

    LinkedList中部分方法:

    public void addFirst(E e):将指定元素插入此列表的开头。
    public void addLast(E e):将指定元素添加到此列表的结尾。
    public void push(E e):将元素推入此列表所表示的堆栈。
    
    public E getFirst():返回此列表的第一个元素。
    public E getLast():返回此列表的最后一个元素。
    
    public E removeFirst():移除并返回此列表的第一个元素。
    public E removeLast():移除并返回此列表的最后一个元素。
    public E pop():从此列表所表示的堆栈处弹出一个元素,此方法相当于removeFirst
    
    public boolean isEmpty():如果列表不包含元素,则返回true。

    四、Set接口

    特点:①不允许存储重复元素②没有索引,没有带索引的方法,也不能使用普通的for循环遍历

    Set接口的实现类:

      1. HashSet,底层是哈希表结构(查询的速度非常快),不同步;是一个无序的集合,存储和取出元素的顺序可能不一致,两种遍历方式:增强for循环和迭代器遍历

      2. LinkedHashSet,底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序,有序,不允许存储重复元素

    注意:
    HashSet集合存储数据的结构(哈希表)
    jdk1.8版本之前:哈希表=数组+链表
    jdk1.8版本之后:
        哈希表=数组+链表
        哈希表=数组+红黑树(提高查询的速度)

     set集合保证元素唯一:存储的元素(String、Integer、Student、Person.......),必须重写hashCode方法和equals方法;如:存储Person类型,同名统年龄的人视为同一个人,此时为保证元素唯一,就必须重写hashCode方法和equals方法

    import java.util.Objects;
    
    public class Person {
        String name;
        int age;
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
    
        }
    
        public String getName() {
            return name;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Student student = (Student) o;
            return age == student.age &&
                    Objects.equals(name, student.name);
        }
    
        @Override
        public int hashCode() {
    
            return Objects.hash(name, age);
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
  • 相关阅读:
    揭开Future的神秘面纱——任务取消
    阻塞队列和生产者-消费者模式
    ExecutorService——<T> Future<T> submit(Callable<T> task)
    ExecutorService接口概要
    Executor简介
    使用显式的Lock对象取代synchronized关键字进行同步
    SingleThreadExecutor(单线程执行器)
    后台线程(daemon)
    加入一个线程
    计算机网络的一些英文缩写词
  • 原文地址:https://www.cnblogs.com/svipero/p/12443248.html
Copyright © 2020-2023  润新知