集合

    xiaoxiao2021-12-14  23

    集合

    可以存储不同类型的数据

    是存储对象数据的容器

    集合的长度可以发生变化

    Collection  集合的根接口

    |-List  有序可重复

    |------ArrayList

    |------LinkList

    |------Vector

    |-Set 无序不可重复

    |------HashSet

    |------LinkHashSet

    |------TreeSet

    collection常用方法

    add(E e)    添加元素之后返回boolean值

    Collection c = new ArrayList(); c.add("add");

    addAll(Collection c)   

    Collection<E> cc = new ArrayList<>(); cc.add((E) "addAll"); cc.addAll(c);

    clear() remove(Object o)  删除指定元素并返回boolean 值

    removeAll(Collection  c)  

    c.removeAll(cc); //删除c集合中与cc的交集元素,也就是重复元素,删除的是c中的元素

    retainAll(Collection  c) //保留交集元素 size() // 查看元素的个数 isEmpty() // 是否为空

    contains(Object o) // 判断是否存在重复的元素,内部的实现是依赖equals方法

    c.containsAll(c2)//c集合有包含c2集合中的所有元素

    containsAll(Collection<?> c) 

    toArray() //把集合中的全部元素存储到一个obj 的数组

    iterator() //迭代器 返回的是实现类的对象

    Collection c = new ArrayList(); Iterator it = c.iterator(); //返回一个迭代器 // iterator 实际 上返回的是iterator接口的实现类对象。

     boolean hasNext() 如果仍有元素可以迭代,则返回 true。 当前指针指向的位置是否有元素

    public boolean hasNext() { return cursor != size; }//源码hasNext的实现

    while(it.hasNext()){ // hasNext() 是否有元素可以遍历。 System.out.println("元素:"+ it.next()); //获取元素 }

    next() 返回迭代的下一个元素。 输出当前的元素,移动指针到下一个元素的位置

     void remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 

    //清空集合 的元素 while(it.hasNext()){ it.next(); it.remove(); }

    List

    list继承了collection,有序可重复,进去和出来的顺序一致,先进先出 只有List接口下面的集合类才具有索引值,其他集合类都没有索引值

    add(int index, E element) //在指定位置插入指定元素

    addAll(int index, Collection<? extends E> c)  //添加另一个集合到本集合的末尾处

    get(int index) //根据索引值获取元素

    indexOf(Object o) //查找指定元素的索引值

    lastIndexOf(Object o) //最后一次出现的位置

    subList(int fromIndex, int toIndex)  // 截取指定从fromindex 到toindex 的元素(包头不包含尾)

     

    set(int index, E element) // 替换指定索引值得元素

      

    listIterator() //父接口是literator

    hasPrevious()  //判断是否存在上一个元素。

    previous()   // 当前指针先向上移动一个单位,然后再取出当前指针指向的元素。

    next(); // 先取出当前指针指向的元素,然后指针向下移动一个单位。

    add //插入到当前指针的位置

    set// 替代迭代器最后一次返回的元素

    在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数

    如果需要添加或者删除只能使用迭代器的方法进行操作。

    如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。

    ArrayLIst

    内部实现的是object数组 初始长度为10 ArrayList 底层是维护了一个Object数组实现 的, 特点: 查询速度快,增删慢。

    LinkList

    hasPrevious()  判断是否存在上一个元素。 previous()    当前指针先向上移动一个单位,然后再取出当前指针指向的元素。 next();  先取出当前指针指向的元素,然后指针向下移动一个单位。   add(E e)   把当前有元素插入到当前指针指向的位置上。 set(E e)   替换迭代器最后一次返回的元素。 LinkedList底层是使用了链表数据结构实现的,  特点: 查询速度慢,增删快。 

    Vector

    维护了一个Object的数组实现的,实现与ArrayList 一样 ,但是Vector是线程安全的,操作效率低。

    HashSet

    是用一个哈希表来实现的,存取速度快 在判断是否添加相同元素时,不仅要重写hashcode方法还要重写equals方法

    TreeSet

    是基于二叉树实现 基于元素的自然书顺序排序 如果元素不具备自然顺序则需要继承comparable接口重写comparto方法 compareTo方法返回 的是0,那么该元素就被视为重复元素,不允许添加. 一般都自己写Comparator比较器,在创建treeset对象时传入比较器 class 类名 implements Comparator{ }

    Collections

    工具类 Collections.binarySearch(list, key)  // 二分法查找 Collections.sort(list);// 排序 // Collections.reverse(list);反转元素

    转载请注明原文地址: https://ju.6miu.com/read-971494.html

    最新回复(0)