JAVA学习——容器(概述)



容器是用来存储对象的工具,容器不可以存储基本类型,因为基本类型保存在栈中随时都可能被清除。

数组与集合的不同:1、数组虽然可以存储对象但是其中的对象必须是属于同一类型的,而容器是可以包含不同的对象类型的。2、数组是固定长度的,其长度在定义时就已经固定不可以改变,容器的大小是可动态改变的。3、数组可以存储基本类型而容器只可以存储对象。

         容器家族图谱如下:

        

         之所以会有如此多的容器,是因为每一种容器对对象进行存储时采用的数据结构不同。其实集合和数组一样存储的都是元素的地址,而不是元素实体。容器中的元素可以直接使用print()方法打印出来。容器一般都包含增、删、改、查等操作。

         下面是容器类的公共方法:

 boolean

add(E e)
          确保此 collection 包含指定的元素(可选操作)。

 boolean

addAll(Collection<? extendsE> 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<E>

iterator()
          返回在此 collection 的元素上进行迭代的迭代器。

 boolean

remove(Object o)
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。

 boolean

RemoveAll(Collection<?> c)
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。

 boolean

retainAll(Collection<?> c)
          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。

 int

size()
          返回此 collection 中的元素数。

 Object[]

toArray()
          返回包含此 collection 中所有元素的数组。

toArray(T[] a)
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

<T> T[]

    此处重点说一下iterator(),Java 的Iterator,它只能用来:

1)使用方法 iterator()要求容器返回一个 Iterator。第一次调用Iterator 的next()方法时,它返回序列的第一个元素。

  2)使用next()获得序列中的下一个元素。

  3)使用hasNext()检查序列中是否还有元素。

4)使用remove()将上一次返回的元素从迭代器中移除。

    在JAVA容器中有一个特殊的迭代器listIterator,该迭代器只能用于list类的访问。该迭代器所包含的主要方法是:

1、next()得到下一个元素;previous()得到前一个元素。

2、nextIndex()得到下一个元素的索引号;previousIndex()得到前一个元素的索引号。

   3、hasNext()判断是否还有后继元素;hasPrevious()判断是否还有前驱元素。

4、listIterator()得到该集合的迭代器;listIterator(n)得到一个子迭代器,从原集合中第n+1个元素起(注意考虑第一个元素索引号为0)至集合末尾的所有元素组成一个子迭代器。

5、set(“newElement”)将当前元素替换为newElement。这个方法的调用类似remove()方法,需要先调用next()方法。

    在使用迭代器的同时不可以使用容器自身的方法对容器中的元素进行修改,否则会发生ConcurrentModificationException异常。