day17

集合:新的容器,只用来装对象,不能用来装基本数据类型的数据
   集合比数组
  (1)类型更丰富,它有各种特征的集合
  (2)无需程序员来编写“扩容”等代码,也不用通过"total"来记录实际的元素的个数
  分为两大类:
  (1)Collection:存储一组对象,单身party
  (2)Map:存储“映射关系”的,存储“键值对” (key,value),情侣party,家庭party
    Collection:最常用的两个子接口
    List:有序(添加的顺序)的可重复的
    Set:无序(添加的顺序)的不可重复

java.util.Collection:接口
   JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现
   1、添加
     boolean add(Object obj)
     boolean addAll(Collection other):
     当前集合 = 当前集合  ∪  other集合
   2、删除
     boolean remove(Object o)  
     boolean removeAll(Collection other) 
     当前集合 = 当前集合  - (当前集合 ∩ other)
     void clear() 
   3、修改(没有提供)
   4、查找:
    boolean contains(Object o)  
    boolean containsAll(Collection c) 
    判断c集合是否是当前集合的子集
    boolean isEmpty() 
   5、获取元素的个数
     int size() 
   6、排序(没有提供)
     没有提供的原因,某些集合自带排序功能,而且Collections工具类有排序功能
   7、遍历
     Iterator<E> iterator() :获取集合自身的迭代器,用于遍历集合用的
     Object[] toArray() 
   8、求两个集合的交集
     boolean retainAll(Collection<?> c)  
     当前集合 = 当前集合 ∩ other

java.util.Iterator接口:
  (1)boolean hasNext() :是否有下一个元素需要迭代
  (2)Object next() :取出下一个元素
  (3)void remove() :删除刚刚迭代的元素

 java.util.List:
    有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。
    用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
    List是Collection的子接口,那么Collection中的方法它也有。
    List增加了Collection接口没有的方法,和索引位置相关的方法:
   1、添加
     boolean add(Object obj):List系列的,默认添加到最后
     boolean addAll(Collection other):List系列的,默认添加到最后
     boolean add(int index ,Object obj):在指定位置index处,插入一个元素obj
     boolean add(int index, Collection other):在指定位置index处,插入多个元素,other中的多个元素
  2、删除
     boolean remove(Object o)  
     boolean removeAll(Collection other) 
     void clear() 
     Object remove(int index):删除指定位置index的元素,删除的同时还返回了该元素,如果需要就接收,不需要就不接收。
  3、修改(有提供)
     Object set(int index, Object element) :替换集合index位置的元为element,返回被替换的旧元素 
  4、查找:
     boolean contains(Object o)  
     boolean containsAll(Collection c) 
     判断c集合是否是当前集合的子集
     boolean isEmpty() 
      int indexOf(Object o)  
      int lastIndexOf(Object o)  
      Object get(int index) 
   5、获取元素的个数
      int size() 
   7、遍历
      Iterator<E> iterator() :获取集合自身的迭代器,用于遍历集合用的
     Object[] toArray() 
     增加了:
      ListIterator<E> listIterator():
      ListIterator和Iterator有什么不同?
      Iterator只能从前往后遍历,而ListIterator可以从任意位置从前往后,从后往前。
   8、截取列表的一部分
      List<E> subList(int fromIndex, int toIndex)

java.util.List接口的实现类有:
    java.util.ArrayList:动态数组
    java.util.Vector:动态数组
    java.util.LinkedList:链表
    java.util.Stack:栈
    ArrayList和Vector:
    Vector:是旧版本,线程安全的,扩容机制为原来的2倍,支持旧版的Enumeration迭代器
    ArrayList:是新版本,线程不安全的,扩容机制为原来的1.5倍,不支持Enumeration迭代器

   ArrayList只用:foreach和Iterator或ListIterator
     只看,不改:foreach
     看,并且删除:从前往后:Iterator
     看,并且删除、插入,从前往后,或从后往前:ListIterator


    动态数组与LinkedList区别:底层的物理结构不同:
    动态数组底层的实现是数组;
    优点:可以根据索引快速的遍历和查找元素
    缺点:长度不够,需要扩容,影响性能
                删除后,要移动元素,并且空出大量的空间,浪费空间   需要开辟连续的存储空间
   LinkedList是链表结构。
    优点:有几个元素,占几个空间,不需要连续的空间    添加时,不需要扩容    删除:只要修改前后元素的关系就可以,和其他元素无关,无需移动
    缺点:无法索引快速定位,如果要按索引操作,效率比较低,从头遍历

posted @ 2019-10-06 20:20  zzz222zzz  阅读(325)  评论(0编辑  收藏  举报