`

Java集合2:类 AbstractCollection及源码

    博客分类:
  • JAVA
 
阅读更多

 

1.继承关系图



 
 

2. 概览

此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。



3.方法

构造方法摘要
protected AbstractCollection() 
          唯一的构造方法。
  方法摘要
 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 isEmpty() 
          如果此 collection 不包含元素,则返回 true
abstract  Iterator<E> iterator() 
          返回在此 collection 中的元素上进行迭代的迭代器。
 boolean remove(Object o) 
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
 boolean removeAll(Collection<?> c) 
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
 boolean retainAll(Collection<?> c) 
          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
abstract  int size() 
          返回此 collection 中的元素数。
 Object[] toArray() 
          返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a) 
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
 String toString() 
          返回此 collection 的字符串表示形式。

 

4.添加元素相关方法源码

 

	// 确保此 collection 包含指定的元素
	public boolean add(E e) {
		throw new UnsupportedOperationException();
	}

	// 将指定 collection 中的所有元素都添加到此 collection 中
	public boolean addAll(Collection<? extends E> c) {
		boolean modified = false;
		Iterator<? extends E> e = c.iterator();
		while (e.hasNext()) {
			if (add(e.next()))
				modified = true;
		}
		return modified;
	}

 

 

5.移除元素相关方法源码

 

	// 从此 collection 中移除指定元素的单个实例,如果存在的话
	public boolean remove(Object o) {
		Iterator<E> e = iterator();
		if (o == null) {
			while (e.hasNext()) {
				if (e.next() == null) {
					e.remove();
					return true;
				}
			}
		} else {
			while (e.hasNext()) {
				if (o.equals(e.next())) {
					e.remove();
					return true;
				}
			}
		}
		return false;
	}

	// 移除此 collection 中那些也包含在指定 collection 中的所有元素
	public boolean removeAll(Collection<?> c) {
		boolean modified = false;
		Iterator<?> e = iterator();
		while (e.hasNext()) {
			if (c.contains(e.next())) {
				e.remove();
				modified = true;
			}
		}
		return modified;
	}

	// 仅保留此 collection 中那些也包含在指定 collection 的元素
	public boolean retainAll(Collection<?> c) {
		boolean modified = false;
		Iterator<E> e = iterator();
		while (e.hasNext()) {
			if (!c.contains(e.next())) {
				e.remove();
				modified = true;
			}
		}
		return modified;
	}

	// 移除此 collection 中的所有元素
	public void clear() {
		Iterator<E> e = iterator();
		while (e.hasNext()) {
			e.next();
			e.remove();
		}
	}

 

 

6.查找相关方法源代码

 

	// 如果此 collection 包含指定的元素,则返回 true
	public boolean contains(Object o) {
		Iterator<E> e = iterator();
		if (o == null) {
			while (e.hasNext())
				if (e.next() == null)
					return true;
		} else {
			while (e.hasNext())
				if (o.equals(e.next()))
					return true;
		}
		return false;
	}

	// 如果此 collection 包含指定 collection 中的所有元素,则返回 true
	public boolean containsAll(Collection<?> c) {
		Iterator<?> e = c.iterator();
		while (e.hasNext())
			if (!contains(e.next()))
				return false;
		return true;
	}

	// 返回此 collection 中的元素数
	public abstract int size();

	// 如果此 collection 不包含元素,则返回 true
	public boolean isEmpty() {
		return size() == 0;
	}

 

 

7.转换相关方法源代码

 

	// 返回在此 collection 中的元素上进行迭代的迭代器
	public abstract Iterator<E> iterator();

	// 返回包含此 collection 中所有元素的数组
	public Object[] toArray() {
		// Estimate size of array; be prepared to see more or fewer elements
		Object[] r = new Object[size()];
		Iterator<E> it = iterator();
		for (int i = 0; i < r.length; i++) {
			if (!it.hasNext()) // fewer elements than expected
				return Arrays.copyOf(r, i);
			r[i] = it.next();
		}
		return it.hasNext() ? finishToArray(r, it) : r;
	}

	// 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同
	public <T> T[] toArray(T[] a) {
		// Estimate size of array; be prepared to see more or fewer elements
		int size = size();
		T[] r = a.length >= size ? a : (T[]) java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
		Iterator<E> it = iterator();

		for (int i = 0; i < r.length; i++) {
			if (!it.hasNext()) { // fewer elements than expected
				if (a != r)
					return Arrays.copyOf(r, i);
				r[i] = null; // null-terminate
				return r;
			}
			r[i] = (T) it.next();
		}
		return it.hasNext() ? finishToArray(r, it) : r;
	}

	//
	private static <T> T[] finishToArray(T[] r, Iterator<?> it) {
		int i = r.length;
		while (it.hasNext()) {
			int cap = r.length;
			if (i == cap) {
				int newCap = ((cap / 2) + 1) * 3;
				if (newCap <= cap) { // integer overflow
					if (cap == Integer.MAX_VALUE)
						throw new OutOfMemoryError("Required array size too large");
					newCap = Integer.MAX_VALUE;
				}
				r = Arrays.copyOf(r, newCap);
			}
			r[i++] = (T) it.next();
		}
		// trim if overallocated
		return (i == r.length) ? r : Arrays.copyOf(r, i);
	}

	// 返回此 collection 的字符串表示形式
	public String toString() {
		Iterator<E> i = iterator();
		if (!i.hasNext())
			return "[]";

		StringBuilder sb = new StringBuilder();
		sb.append('[');
		for (;;) {
			E e = i.next();
			sb.append(e == this ? "(this Collection)" : e);
			if (!i.hasNext())
				return sb.append(']').toString();
			sb.append(", ");
		}
	}

 

 

  • 大小: 8.6 KB
  • 大小: 6.8 KB
分享到:
评论

相关推荐

    Java 后端资源:Java 集合框架.docx

    Java集合框架提供了一系列实现上述接口的具体类,这些类根据不同的需求提供了多样化的选择。 - **`AbstractCollection`**:实现了大部分集合接口的通用方法。 - **`ArrayList`**:基于动态数组实现的`List`接口。 -...

    Java集合框架总结

    Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和操作数据。本文档将深入探讨Java集合框架的关键组成...

    JAVA AbstractCollection类的使用方法.pdf

    在Java集合框架中,`AbstractCollection`类是一个非常重要的组件,它是`Collection`接口的直接实现,为其他集合类提供了一个基础实现。`AbstractCollection`类的目的是减少开发者实现`Collection`接口时需要编写的...

    Java 2集合框架

    ### Java 2 集合框架详解 #### 一、Java 2 集合框架概览 Java 2 集合框架是Java标准库的一部分,它为开发者提供了多种多样的容器,使得管理和操作对象变得更为高效和简单。整个框架主要由三部分构成:集合接口、...

    java集合框架图

    此外,还有五个抽象类以及多个实现类,它们共同构成了Java集合框架的基础。 #### 二、核心接口介绍 1. **`Collection`接口**: - 这是最基本的接口,所有其他集合接口都是它的子类。它代表了一组对象,其中可能...

    Java 集合框架+集合实例

    - **AbstractCollection**:部分实现了Collection接口,作为其他集合类的基类。 - **AbstractList**:继承AbstractCollection并实现了大部分List接口功能。 - **AbstractSequentialList**:继承AbstractList,...

    java集合资料整理

    Java集合框架还提供了一些抽象类,这些抽象类实现了部分接口的方法,从而减少了开发者的编码负担: - **`AbstractCollection`**:为`Collection`接口提供了基本实现。 - **`AbstractList`**:为`List`接口提供了...

    Java集合详解解释

    ### Java集合详解解释 #### 一、集合框架概述 Java集合框架是Java平台的一个核心特性,为存储和处理数据提供了一种高效的方式。它由多种接口、抽象类和具体实现类构成,支持不同类型的集合,如列表(List)、集(Set)...

    java 集合框架的原理及其使用

    2. **AbstractList**和**AbstractSet**:这两个类进一步为List和Set接口提供了抽象实现,简化了自定义列表和集合类的开发。 3. **AbstractMap**:为Map接口提供了基础实现,包含了一些通用的方法,但通常需要子类...

    详解java集合框架

    2. **抽象类**:如`AbstractCollection`、`AbstractList`、`AbstractSet`等,它们实现了部分接口方法,以便于我们自定义集合类时不必重写所有方法。 3. **实现类**:例如`ArrayList`、`LinkedList`、`HashSet`、`...

    Java集合源码全面分析

    Java集合框架是Java编程语言中不可或缺的一部分,它提供了一系列接口和类,用于高效地存储和操作数据。在本文中,我们将全面分析Java集合框架的核心概念和实现细节。 首先,Java集合框架的基础是`Collection`接口,...

    JAVA中的集合和js中集合

    除了接口之外,Java集合框架还提供了一些抽象类,如`AbstractCollection`、`AbstractList`、`AbstractSet`等,它们实现了部分接口的方法,从而简化了具体集合类的实现过程。例如,`ArrayList`继承自`AbstractList`,...

    java集合框架图 (清晰表明集合之间的关系)

    Java 2 集合框架图集合接口有 6 个,表示不同集合类型,是集合框架的基础。抽象类有 5 个,对集合接口的部分实现。可扩展为自定义集合类。实现类有 8 个,对接口的具体实现。 集合框架的基础是 Collection 接口,它...

    java集合类

    ### Java集合类详解 #### 一、Java集合框架概述 Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。这些数据结构包括列表、集、映射等,它们通过一系列接口和相应的实现类来组织。...

    java集合框架系统剖析

    Java集合框架是一个高度抽象化的数据结构模型,它提供了一系列标准的接口、抽象类以及具体的实现类来帮助开发者高效地管理和操作各种对象集合。这一框架是Java 2平台的重要组成部分之一,极大地简化了面向对象编程中...

    Java1集合应用事例(课程作业)

    在"java期末作品设计报告(黄韵豪).doc"中,可能包含了关于这些集合类的具体应用案例,例如如何创建和操作ArrayList,如何在HashSet中存储和查找元素,或者如何使用LinkedList实现栈或队列等数据结构。此外,报告可能...

    java集合框架总结

    在Java编程中,集合框架(Collections Framework)是处理数据的重要工具集,它提供了一系列接口和类来存储、操作和检索不同类型的元素。本文将深入解析Java集合框架的关键知识点,涵盖其核心组件、接口以及常用类。 ...

Global site tag (gtag.js) - Google Analytics