集合Collection接口

Hashset 判断重复值的步骤

        步骤1:通过hashCode(),判断哈希值

        步骤2:如果哈希值相同,则调用equals()

        例:

        @Override

        public int hashCode() {

                return Objects.hash(this.name,this.page,this.price);

        }

        @Override

        public boolean equals(Object obj) {

                if(this == obj) {

                return true;

        }

        if(obj instanceof Book) {

                Book book = (Book)obj;

                return this.name.equals(book.name) &&

                this.page == book.page &&

                this.price == book.price;

        }

                return false;

        }

Collection接口  

 特点:单列集合,集合中仅保存值

List接口:  特点:有序、允许重复值

ArrayList类 

数据结构:基于Object[]数组实现的
初始化

(1)elementData被初始化为空数组

        ArrayList<String> list5 = new ArrayList<>();

(2)内部数组elementData被初始化成指定容量的数组

        ArrayList<String> list6 = new ArrayList<>(20000);

(3)内部数组elementData按照传入集合进行初始化

        ArrayList<String> list7 = new ArrayList<>(Arrays.asList(""));

适用场景:

        ArrayList适合数据连续性遍历,读多写少的场景

扩容:

        默认为空数组,第一次添加元素,数组增至10,容量不足按原容量1.5倍扩容增长.

 常用方法:
        添加新元素:

                (1)boolean add(E e)   添加新元素至集合尾部

                (2)void add(int index,E element)  添加元素到下标位置

                (3)boolean addAll(Arrays.asList("元素"))  添加集合内所有元素到当前集合

        获取元素

                (1)E get(int index)   获取指定位置下标的元素

                (2)List<E> subList(int fromIndex,int toIndex  截取指定位置

        判断元素

                (1)boolean contains(Object o)  判断集合中是否存在元素

                (2)boolean equals(Object o)判断两个集合中元素是否相同

                (3)int indexOf(Object o)查找指定元素的下标位置

       删除元素

                (1)void clear()  清空集合

                (2)boolean remove(Object o)  删除指定内容的元素

                (3)E remove(int index)   删除指定位置元素

                (4)boolean removeAll(Collection c)  删除当前集合与指定集合的相同元素

                (5)boolean retainAll(Collection  保留当前集合与指定集合相同元素

       修改元素

                 E set(int index,E element)   将指定下标位置的元素,修改为指定新元素

       排序

                 void sort(new Comparator<String>(){重写compare方法})  按照                                               Comparator接口实现类的比较规则,对集合诶元素进行排序

       转换

                 T[] toArray(T[] a)   将当前集合转换为数组

       迭代器

                  Iterator<E> iterator()   该迭代器仅提供向后遍历

                  ListIterator<E> listIterator(int index)   该迭代器提供向前或向后遍历

LinkedList类  基于双向链表实现的

       由于采用链表结构,每次添加元素,都会创建新的Node节点并分配空间,所有不存在扩容

       适用场景:频繁添加删除操作,写多读少。
       常用方法:
       添加元素:

                  (1)boolean add(E e)    添加新元素至链表尾部

                  (2)void addFirst(E e)    添加新元素至链表头部

                  (3)void addLast(E e)    添加新元素至链表尾部

        获取元素:

                  (1)E get(int index)    遍历链表,查找指定位置的元素

                  (2)E getFirst()    获取链表中的头元素

                  (3)E getLast()    获取链表的伪元素

        判断元素:

                   int indexOf(Object o)    查找链表指定元素下标位置

        删除元素:

                   E remove()     删除链表中的头元素

                   boolean remove(Object o)    删除指定内容的严肃

                   E remove(int index)    删除指定位置元素

                   E removeFirst()    删除链表中的头元素

                   E removeLast()    删除链表中的尾元素

                   default void sort(Comparator c)    按照Comparator比较器,将链表中所有元素排序

                   T[] toArray(T[] a)    将链表转换成数组

Vector类

       线程安全

       性能较差

       扩容方式:自定义增长或扩容2倍

Set接口   无序,值唯一

HashSet类

特点:无序唯一,输出的顺序既不是添加的顺序,也不是String排序的顺序。

数据结构:维护了一个HashMap来进行存储,元素值保存在HashMapkey的位置。

经常用Set用于去除重复元素。并且元素也需要正确实现equals()和hashCode()方法,否则该元素无法正确地放入Set。

核心代码:

public class HashSet<E> implements Set<E> {
    // 持有一个HashMap
    private HashMap<E, Object> map = new HashMap<>();

    // 放入HashMap的value(常量)
    private static final Object PRESENT = new Object();

    public boolean add(E e) {
        return map.put(e, PRESENT) == null;
    }

    public boolean contains(Object o) {
        return map.containsKey(o);
    }

    public boolean remove(Object o) {
        return map.remove(o) == PRESENT;
    }
}
           常用方法

                 boolean add(E e)    添加新元素

                 void clear()    清空集合

                 boolean contains(Object o)    判断集合中是否包含指定元素

                 boolean isEmpty()    判断集合是否为空

                 Iterator<E> iterator    获取迭代器

                 boolean remove(Object o)    删除元素

                 int size()    获取集合长度(元素个数)

LinkedHashSet类   

特点:有序

           数据结构:
                   在内部创建维护了一个LinedHashMap用于维护元素的有序性。

TreeSet类   

        特点:可排序,因为它实现了SortedSet接口。
         数据结构:创建TreeSet时,其构造方法创建了一个TreeMap,用于保存元素,由于                                  TreeMap可以自动排序,所有TreeSet中的元素也按照排序特点保存。所以,添加的元素必须正确实现Comparable接口,如果没有实现Comparable接口,那么创建TreeSet时必须传入一个Comparator对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值