java容器 (一) Collection简介

来源:互联网 发布:银行家算法的例题详解 编辑:程序博客网 时间:2024/05/30 22:55

中间有好几天木有看了~接下来要抓紧咯~~

1. Collection接口

  为解决在任意时刻任意位置创建任意数量的对象,Java实用类库提供了一套相当完整的容器类来解决这个问题。Java容器类类库的用途是“保存对象”。并将其划分为两个不同的概念:

  1. Collection:一个独立元素序列,这些元素都服从一条或多条规则;
  2. Map:一组“键值对”对象,允许使用键值来查找。


  Java中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结构中熟知的。例如Map,Set,List等。并且Java用面向对象的设计对这些数据结构和算法进行了封装,这就极大的减化了程序员编程时的负担。程序员也可以以这个集合框架为基础,定义更高级别的数据抽象,比如栈、队列和线程安全的集合等,从而满足自己的需要。

public interface Collection<E>         extends       Iterable<E>
  JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 SetList)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

  所有通用的 Collection 实现类(通常通过它的一个子接口间接实现Collection)应该提供两个“标准”构造方法:一个是 void(无参数)构造方法,用于创建空 collection;另一个是带有 Collection 类型单参数的构造方法,用于创建一个具有与其参数相同元素新的 collection。实际上,后者允许用户复制任何 collection,以生成所需实现类型的一个等效 collection。尽管无法强制执行此约定(因为接口不能包含构造方法),但是 Java 平台库中所有通用的Collection 实现都遵从它。如,ArrayList的构造函数(不全)



    /**     * Constructs a list containing the elements of the specified     * collection, in the order they are returned by the collection's     * iterator.     *     * @param c the collection whose elements are to be placed into this list     * @throws NullPointerException if the specified collection is null     */    public ArrayList(Collection<? extends E> c) {        elementData = c.toArray();        if ((size = elementData.length) != 0) {            // c.toArray might (incorrectly) not return Object[] (see 6260652)            if (elementData.getClass() != Object[].class)                elementData = Arrays.copyOf(elementData, size, Object[].class);        } else {            // replace with empty array.            this.elementData = EMPTY_ELEMENTDATA;        }    }
方法摘要 booleanadd(E e)
          确保此 collection 包含指定的元素(可选操作)。 booleanaddAll(Collection<? extends E> c)
          将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 voidclear()
          移除此 collection 中的所有元素(可选操作)。 booleancontains(Object o)
          如果此 collection 包含指定的元素,则返回 true booleancontainsAll(Collection<?> c)
          如果此 collection 包含指定 collection 中的所有元素,则返回 true booleanequals(Object o)
          比较此 collection 与指定对象是否相等。 inthashCode()
          返回此 collection 的哈希码值。 booleanisEmpty()
          如果此 collection 不包含元素,则返回 true Iterator<E>iterator()
          返回在此 collection 的元素上进行迭代的迭代器。 booleanremove(Object o)
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 booleanremoveAll(Collection<?> c)
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 booleanretainAll(Collection<?> c)
          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 intsize()
          返回此 collection 中的元素数。 Object[]toArray()
          返回包含此 collection 中所有元素的数组。<T> T[]toArray(T[] a)
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

2. Collections

public class Collections          extends       Object     

      此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。

  如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都将抛出 NullPointerException。

addAll(Collection<? super T> c, T... elements)
          将所有指定元素添加到指定 collection 中。

nCopies(int n, T o)
          返回由指定对象的 n 个副本组成的不可变列表。

replaceAll(List<T> list, T oldVal, T newVal)
          使用另一个值替换列表中出现的所有某一指定值。

fill(List<? super T> list, T obj)
          使用指定元素替换指定列表中的所有元素。


package rte;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Test {public static void main(String []args){//利用ArrayList的构造函数<Collection c>来创建list//Collections.nCopies(int n, T o)返回由指定对象的 n 个副本组成的不可变列表List<StringAddress> list = new ArrayList<StringAddress>(Collections.nCopies(4, new StringAddress("Hello")));System.out.println(list);//Collections.fill(List<? super T> list, T obj) 使用指定元素替换指定列表中的所有元素Collections.fill(list, new StringAddress("World"));System.out.println(list);}}class StringAddress{private String s;public StringAddress(String s){this.s=s;}public String toString(){return super.toString()+" "+s;}}

输出

[rte.StringAddress@6d06d69c Hello, rte.StringAddress@6d06d69c Hello, rte.StringAddress@6d06d69c Hello, rte.StringAddress@6d06d69c Hello][rte.StringAddress@7852e922 World, rte.StringAddress@7852e922 World, rte.StringAddress@7852e922 World, rte.StringAddress@7852e922 World]


0 0