zoukankan      html  css  js  c++  java
  • Collection接口和list,set子类

    Collection接口常用的子接口有:List接口、Set接口
    List接口常用的子类有:ArrayList类、LinkedList类
    Set接口常用的子类有:HashSet类、LinkedHashSet类

    方式1:Collection<元素类型> 变量名 = new ArrayList<元素类型>();
    方式2:Collection 变量名 = new ArrayList();
    方式1创建的集合,只能存储<>中指定的元素类型,该方式为常用方式
    方式2创建的集合,集合的元素类型默认为Object类型,即任何类型的元素都可以存储。


    Collectoin集合的功能概述:

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

    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) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

    LinkedList 中的方法

    特点:双向链表 增删快,查询慢

    实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方
    法。

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


    Set集合

     特点:无序(指元素的存储和取出顺序不一致)、存储元素唯一,无索引

    java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与
    Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比
    Collection 接口更加严格了。与 List 接口不同的是, Set 接口都会以某种规则保证存入的元素不出
    现重复。

        

    Set集合的子类

     
    HashSet类的特点
      

    HashSet类不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。
    
    注意:虽然Set集合的元素是无序的,但是作为集合来说,它肯定有它自己的元素存储顺序。
    
    而如果你的顺序恰好和它的存储顺序一致,这代表不了有序,你可以多存储一些数据,看效果。

    HashSet类的底层数据结构是哈希表。而哈希表保证元素的唯一性依赖于两个方法:
    int  hashCode() 和 boolean equals(Object obj)
    
    用HashSet存储元素的执行顺序:
    
    首先比较hashCode()值是否相同
    
    是:继续执行equals(),看其返回值
    
        是true:说明元素重复,不添加
    
        是false:就直接添加到集合
    
    否:就直接添加到集合


    HashSet类有一个子类LinkedHashSet,LinkedHashSet存储元素的特点是有序、唯一、无索引。

    LinkedHashSet的底层数据结构由链表和哈希表组成,由链表保证元素有序,由哈希表保证元素唯一。


    ---|Collection: 单列集合  
        ---|List: 有存储顺序, 可重复  
            ---|ArrayList:  数组实现, 查找快, 增删慢,由于是数组实现, 在增和删的时候会牵扯到数组  增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快  
            ---|LinkedList: 链表实现, 增删快, 查找慢,由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元  素, 后一个元素记住前一个元素. 这样的增删效  率较高但查询时需要一个一个的遍历, 所以效率较低。
            ---|Vector: 和ArrayList原理相同, 但线程安全, 效率略低  和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低。  
                ---|Set: 无存储顺序, 不可重复  
                    ---|HashSet   无顺序 无索引 元素唯一
                    ---|TreeSet   无索引 元素唯一 有自然顺序
                    ---|LinkedHashSet   有顺序 无索引 元素唯一
    ---| Map: 键值对  
            ---|HashMap  key不可重复,无序存取,哈希表实现  key、value值均可为null。只允许一条记录的键为NULL
            ---|TreeMap  键不能为null,value是可以为null的
            ---|HashTable  key、value值均不可为null。
         ---|LinkedHashMap 双向链表的哈希表

     

  • 相关阅读:
    Yet Another Monster Killing Problem
    Element Extermination
    最短路径
    Secret Passwords
    New Year Parties
    Water The Garden
    Zero Quantity Maximization
    Anya and Cubes
    代码规范&《数学之美》读后感
    带负边权的最短路径(有向图)——Bellman-Ford算法
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/10438938.html
Copyright © 2011-2022 走看看