美文网首页
集合(一)Collection

集合(一)Collection

作者: 机智的柠檬 | 来源:发表于2020-03-19 09:02 被阅读0次

    集合框架图

    image.png

    Collection

    接口 是Set List Queue的 父接口

    方法:
    - boolean add(Object o):向集合中添加元素,添加成功返回true
    - boolean addAll(Collection c):向集合中添加集合c ,添加成功返回true
    - void clean():将集合清空,集合长度变为0
    - boolean contains(Object o):判断集合是否包含 o
    - boolean containsAll(Collection c):判断集合是否包含集合c
    - boolean isEmpty():判断集合是否为空
    - boolean remove(Objece o):删除指定元素o,当集合中包含多个o时,只删除第一个
    - boolean removeAll(collection c):从集合中删除集合C中包含的所有元素,相当于A-(A∩C),如果删除一个或者一个以上的元素,则返回true
    - boolean retainAll(Collection c):从集合中删除集合c中不包含的元素,相当于取交集;如果删除了一个或者一个以上的元素,则返回true
    - int size():返回集合的长度
    - Object[] toArray():将集合转化为数组
    - Iterator iterator: 返回一个Iterator 迭代对象,用于遍历集合里面的元素。
    
    集合的迭代
    Collection<String> c = new ArrayList();
    c.add("a");
    c.add("b");
    c.add(""d);
    //方式一:
    for(String str: c){
        System.out.println(str);
    } 
    //方式二:
    Iterator it = c.itetator();
    while(it.hasNext()){
        str = it.next();
        System.out.println(str);
    }
    

    Set集合

    • 无序、不可重复
    • Set的实现类 都是 线程不安全的。可以通过Collections工具类的synchronizedSortedSet方法来“包装”该Set集合,此操作最好在创建时候进行。
      SortedSet s = Collections.sychronizedSortedSet(new TreeSet());

    其他的完全与Collection相同相当于一个罐子, 不能记住每个元素添加顺序, 如果试图添加相同的元素 会添加失败add()方法返回 false, 且元素不会被添加。

    HashSet

    HashSet 按Hash算法来存储集合中的元素
    特点:

    • 不能保证元素的添加顺序
    • HashSet不是同步的,如果有两个或者两个以上的线程同时修改了HashSet集合,必须通过代码来保证其同步
    • 集合元素值可以为null

    当向HashSet中添加元素时,HashSet会调用对象的hashCode()方法来得到该对象的hashCode值,根据该值来决定在HashSet中的存储位置。

    如果有两个元素通过equals()方法返回true,但是hashCode()的值不同,那么HashSet同样会把他们放在不同的位置。

    即HashSet 中元素相同是 equals()方法比较相等并且hashCode()返回值相同。

    LinkedHashSet

    1、是HashSet的子类 也是根据元素的 hashCode值存放
    2、使用链表来维护元素的次序
    3、当遍历集合时 会按照元素的添加顺序来访问元素
    4、LinkedHashSet 性能略低于 HashSet ,但是在迭代访问的时
    候有很好的性能。

    SortedSet

    TreeSet

    TreeSet 实现了 SortedSet接口
    集合内的元素是有序的、并且是同一种类型。

    当向TreeSet添加元素e时,会调用该对象的compareTo(Object obj)方法与容器中的元素进行一一比较,然后根据红黑树结构找到他们的位置。compareTo()方法判断相等 ,那么添加不了。

    采用红黑树算法来存储集合元素。

    自然排序:升序

    定制排序:

    TreeSet是根据元素的实际大小进行排序的。

    方法

    与HashSet相比,添加了访问第一个、前一个、后一个、最后一个元素的方法,并且提供了三个从TreeSet中取子TreeSet的方法。

    Comparator comparator():如果TreeSet才用了定制排序,则返回定制排序所使用的的Comparator;如果使用了自然排序,则返回null。
    Object first():返回集合的第一个元素
    Object last():返回集合的最后一个元素
    Object lower(Object e): 比 e 小的  集合里面最大的元素  e 可以不是集合中的元素
    Object higher(Object e): 大于 e 的最小的元素
    SortedSet subSet(Object a,Object b):返回从 a  到  b 的子集合  左闭右开
    SortedSet headSet(Object e ): 返回小于e 的元素的集合
    SortedSet tailSet(Obejct e ): 返回大于等于e的元素的集合。
    

    List

    • 有序、可重复
    • 可以存放null值
      包含的其他方法:
    Object set(int index, Object element):替换 index 位置的元素  并且返回 被替换的旧元素
    
    Object  remove(int index):删除Index处的元素,并且返回该元素
    
    void add(int index, Object  element):将元素添加到index处,原来集合index后的元素全部往后移
    
    boolean addAll(int index, Collection c):在index处添加集合c
    
    int indexOf(element):第一次出现的element的位置
    
    int lastIndexOf(element):最后一次出现的位置
    
    List subList(from, to): 返回子集合  左闭右开
    
    void sort(Comparator c): 根据 Comparator 参数对List 集合 排序
    
    void replaceAll(UnaryOperator operator):根据operator指定的计算规则重新设置List集合的所有元素。
    
    

    ArrayList

    • 基于数组实现List接口,可以理解为动态数组
    • 通过initialCapacity 参数设置数组的长度,当添加元素 超过 该数组的长度时 initialCapacity 会自动增加
    • 线程不安全的

    如果一次性添加 很多很多元素 可以通过 ensureCapacity(int minCapacity)一次性的增加 intialCapacity

    initialCapacity 默认大小为 10

    void trimToSize():调整集合大小为当前元素的个数。

    Vector

    • 古老的 与ArrayList 差不多
    • 线程安全的
    Stack

    继承 Vector
    方法:

    Object peek():返回第一个元素
    
    Object  pop():返回栈顶元素 并且删除
    
    void push(Object item):添加元素到栈顶
    
    LinkedList
    • 同时实现了 List接口与 Queue接口
    • 可以被当做 List 集合 双端队列 栈
    • 随机访问时候性能差
    • 插入删除方便

    Queue

    队列 FIFO

    void add():
    
    Object element():获取队列的头部元素
    
    boolean offer(): 添加元素  当指定队列长度时 比 add方法好
    
    Object peek():队列尾部元素
    
    Object poll():删除最后一个  并且返回
    
    Object remove(): 删除第一个  并且返回
    
    Deque

    双端队列
    实现类有ArrayDeque:创建时候 可以传递 numElement参数
    指定队列长度
    不指定 默认为16

    PriorityDueqe
    • 违反了 FIFO
    • 按照 从大到小的顺序 进行排列 存放
    • 不允许插入 null 元素

    相关文章

      网友评论

          本文标题:集合(一)Collection

          本文链接:https://www.haomeiwen.com/subject/walcyhtx.html