A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  • 数组和集合的区别:
    A:长度区别:数组的长度固定      集合的长度可变
    B:内容不容:数组存储的是同一类型的元素,,而集合可以存储不同类型的元素
    C:元素的数据类型问题:数组可以存储基本数据类型,也可以存储引用类型,集合职能存储引用类型。
  • Collection :是集合的顶层接口,他的子体系有重复的,有唯一的,有有序的,有无序的。
  • Collection 功能       增   删   判断   查     长度功能。 交集功能。
  • 相应的方法
    boolean
    add(E e)
              确保此 collection 包含指定的元素(可选操作)。
    boolean
    addAll(Collection<? extends E> c)
              将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
    void
    clear()
              移除此 collection 中的所有元素(可选操作)。
    boolean
    contains(Object o)
              如果此 collection 包含指定的元素,则返回 true。
    boolean
    containsAll(Collection<?> c)
              如果此 collection 包含指定 collection 中的所有元素,则返回 true。
    boolean
    equals(Object o)
              比较此 collection 与指定对象是否相等。
    int
    hashCode()
              返回此 collection 的哈希码值。
    boolean
    isEmpty()
              如果此 collection 不包含元素,则返回 true。
    iterator()
              返回在此 collection 的元素上进行迭代的迭代器。(重点)
    boolean
    remove(Object o)
              从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
    boolean
    removeAll(Collection<?> c)
              移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
    boolean
    retainAll(Collection<?> c)
              仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
    int
    size()
              返回此 collection 中的元素数。
    toArray()
              返回包含此 collection 中所有元素的数组。
    <T> T[]
    toArray(T[] a)
              返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
  • 集合没有length()函数,有size()函数
  • Collection 不能new,因为是一个接口,所以new的时候用它的实现类,例如ArrayListCollection c=new ArrayList();
  • c.add("hello")   返回永远是true.
  • 输出的时候,syso(c)就能直接输出。
  • removeAll(Collection c)  只要有c里面一个元素被移除就返回true,只要c里包含的元素都移除。
  • containsAll(Collection c)   只有包含c里面所有的元素才会返回True
  • c1.retainAll(c2)   求交集,交集的元素保存到c1里面。返回值代表c1是否发生改变。
  • c1.toArray()   把集合转换成数组,实现数组的遍历、 返回的是Object类型的数组。
  • Iterator iterator() 迭代器,集合的专用遍历方式。
  • Iterator it=c.iterator();while(it.hasnext()){    Object c=it.next();   syso(c)           }   
  • 迭代器为什么不定义一个类,而是一个接口呢?   因为集合类结构不同,需要不同集合类不同的迭代器。
  • List和 Collection一样。都是抽象的。是有序的集合,与set不同,允许重复的元素。下面是list特有的功能。
  • add(int index,E element)在指定位置添加一个元素。注意不能越界。不能大于现在的size()Object get(int index)  获取指定位置的元素。indexOf(Object o)   返回里表中第一次出现的指定元素的索引。ListIterator listIterator(int index)    返回列表中的列表迭代器。在列表的指定位置。E remove(int index)根据索引,删除元素,并且返回、Object set(int index,Object element )   用指定元素替换列表中指定位置的元素。  修改功能,返回被修改的元素。
  • list集合通过get(index)可以循环遍历list集合内部的数据。结束条件是<size()
  • list集合还可以通过Iterator it=l.iterator()   然后通过it.next()来遍历list集合。
  • ListIterator lit=list.listIterator();照样可以遍历,不是通用迭代器,所以大部分不用。该迭代器继承了Iterator接口。但是他有一个特有的功能。   lit.privious();与next相对,是上一个的意思。倒着遍历。用hasPrivious()看有没有上一个。要想逆向遍历,但是必须先正向遍历,才能使指针指向后面,否则不能用逆向遍历,一般不使用。
  • 注意遍历的时候如果用add会产生并发修改异常,因为add使集合产生变化,但是迭代器却还是原来的迭代器,所以会产生错误。
  • 解决并发修改异常一种是:迭代器修改元素,但是迭代器没有添加功能,所以使用其子接口,ListIterator  lis=l.ListIterator();    lis.add();另外一种方法是:不用迭代器,用get(index)用集合类list来add()元素。
  • ArrayList   底层数据结构是数组,查询快,增删慢,线程不安全,效率高Vector    底层结构是数组,线程安全,效率低,一般不用。LinkedList   底层数据结构是链表,查询满,但是增删快,   线程不安全,效率高。
  • 到底使用哪个list呢?根据他们的优缺点看看需求。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马