`

认识Java Collections (二)

阅读更多
在这一节中,讲详细探讨Java Collections Framework中的每一个接口。

1. Collection Interface
假如你有这样一个声明,Collection<String> c, 你可得到一个String对象的集合。这个集合可能是List,Set或其他的Collection类型。下面的这种用法会创建一个ArrayList,包含String对象。
List<String> list = new ArrayList<String>(c);
以下是Collection接口的声明:
public interface Collection<E> extends Iterable<E> {
    // Basic operations(基本操作)
    int size();
    boolean isEmpty();
    boolean contains(Object element);
    boolean add(E element);         //optional(可选的)
    boolean remove(Object element); //optional
    Iterator<E> iterator();

    // Bulk operations
    boolean containsAll(Collection<?> c);
    boolean addAll(Collection<? extends E> c); //optional
    boolean removeAll(Collection<?> c);        //optional
    boolean retainAll(Collection<?> c);        //optional
    void clear();                              //optional

    // Array operations
    Object[] toArray();
    <T> T[] toArray(T[] a);
}


以上的定义,包含了你对一个集合所期待的基本操作。像add这种方法的定义是及其一般的(没有方法体),因此,不管一个集合是否允许重复的数据出现,这个方法都是有意义的。因为你可以在具体实现中来处理重复元素。

2. 遍历集合
有两种方法可以遍历一个集合:a. for each结构 b. 使用迭代器Iterator
for each结构:
for each结构允许你使用简明的for循环来便利集合中的每一个元素:
for (Object o : collection)
    System.out.println(o);


Iterator:
迭代器对象允许你遍历一个集合,并且提供有选择地删除集合中元素的能力。你可以通过调用集合的iterator方法得到这样一个对象。一个迭代器的接口定义如下:
public interface Iterator<E>{
    boolean hasNext();
    E next();
    void remove(); //optional

}

hasNext方法返回true,如果仍有为访问的元素。而next()方法则返回下一个元素。你可以通过remove来删除最后一个由next返回的元素。
注意:remove方法是在遍历Collection时唯一安全的对集合作出更改的操作。当遍历进程进行时,其它对集合进行更改的操作会导致不可预料的结果。

当你有以下需要时,你需要使用迭代器而不是for each循环:
a. 移除一个元素。由于for each隐藏了迭代器,所以你不能通过for each移除一个元素。因此,如果你需要过滤集合中的数据,请使用迭代器。
b. 平行地处理多个集合。

3. 集合接口的整体操作(bulk operations.)
Bulk operations是在集合整体上进行的一些操作,这样的操作一般都是在基本操作的基础上实现的,尽管在大多数情况下,这些操作的效率都比较低。以下是一些bulk operations:
containsAll()  如果目标集合包含给定集合的全部元素,则返回true
addsAll()  将给定集合中的元素全部添加到目标集合中
removeAll()  从目标集合中移除所有被给定集合包含的元素,即移除两个集合的交集。
retainAll()  从目标集合中保留与给定集合相同的元素,即保留交集。
clear()  移除所有元素。

addAll, removeAll, and retainAll方法都会返回true,如果在处理过程中集合发生了更改。

为了展示bulk operations的威力,我们将编写一些简单的代码(这些都是习惯用法),来移除一个集合c中所有特定元素e的实例。
//移除e元素
c.removeAll(Collections.singleton(e));
//移除所有的null元素
c.removeAll(Collections.singleton(null));


Collections.singleton 是一个静态工厂方法,会返回一个只包含给定元素的不可更改的集合。

4.集合接口的数组操作
数组操作允许我们集合中的元素导出到一个数组中。一个最简单的toArray()调用会生成一个Object[]数组,可以通过更多的限定条件来获得更详细的数组,如
String[] a = c.toArray(new String[0]);

这会生成新的string数组,长度和集合c的元素数一致。

(to be continued...)
分享到:
评论

相关推荐

    java的学习历程.pdf

    在熟悉了Java内置的数据结构后,进一步研究Apache的Java Collections Framework实现,如Apache Commons Collections,可以加深对高级数据结构设计的认识。 总的来说,Java的学习是一个循序渐进的过程,从基础语言...

    Java学习书籍.pdf

    这两个框架的对比和研究能让你对Java的集合处理有更全面的认识。 总之,学习Java需要耐心和实践,通过阅读高质量的书籍和参考资料,结合实际编程练习,你可以逐渐掌握这门语言的精髓。《Thinking in Java》、《Core...

    国家计算机二级JAVA考试大纲

    8. **了解Java的应用领域**:对Java在实际项目中的应用场景有一定的认识。 #### 考试内容详解 1. **Java语言的特点和实现机制**:深入探讨Java的跨平台性、内存管理机制、垃圾回收机制等。 2. **Java体系结构**: ...

    数据结构与Java面向对象程序设计课程之间的有效衔接.pdf

    通过这种映射关系,可以在教学中将Java Collections框架的讲授与数据结构的知识体系相结合,从而加深学生对数据结构在Java编程中应用的认识。 文章强调,Java Collections框架的设计目的主要是满足高性能、一致性、...

    java反序列香草

    1. **不安全的反序列化库**:某些Java库(如Apache Commons Collections)在反序列化时没有足够的安全性检查,可能导致远程代码执行。攻击者可以通过构造恶意的序列化对象来触发这些库的漏洞。 2. **未验证的数据源...

    java评分管理系统

    Java的Collections框架提供了sort()方法,可以对List接口的实现类进行排序。根据需求,可以选择升序或降序排列,也可以自定义比较器进行复杂排序。排序后的数据会更新到视图上,通过JTable或者JList组件呈现给用户,...

    JAVA 基础教材 PDF

    1. **认识Java**:这一章通常会介绍Java的历史、特点、应用领域以及其与其他编程语言的对比。它还会解释Java平台,包括Java虚拟机(JVM)的概念,以及如何安装和配置Java开发环境。 2. **Java虚拟机简介**(第02章...

    Java开发详解.zip

    031314_【第13章:Java类集】_集合工具类:Collections笔记.pdf 031315_【第13章:Java类集】_Stack类笔记.pdf 031316_【第13章:Java类集】_属性类:Properties笔记.pdf 031317_〖第13章:Java类集〗_范例讲解:一...

    Java软件开发实战 Java基础与案例开发详解 2-7 java上机练习 共5页.pdf

    1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3...

    Java软件开发实战 Java基础与案例开发详解 3-10 java基础知识章节练习 共4页.pdf

    1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3...

    Java软件开发实战 Java基础与案例开发详解 9-5 java程序国际化的实现 共9页.pdf

    1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3...

    java基础案例与开发详解案例源码全

    1.2 认识Java语言3 1.2.1 Java语言特性3 1.2.2 JavaApplet4 1.2.3 丰富的类库4 1.2.4 Java的竞争对手5 1.2.5 Java在应用领域的优势7 1.3 Java平台的体系结构7 1.3.1 JavaSE标准版8 1.3.2 JavaEE企业版10 1.3.3 Java...

    Java软件开发实战 Java基础与案例开发详解 11-8 练习题 共5页.pdf

    1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3...

    Java软件开发实战 Java基础与案例开发详解 6-4 访问修饰符 共5页.pdf

    1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3...

    Java基础教程.md.pdf

    ##### 1.1 认识Java - **诞生时间**:1995年5月23日,Java语言由Sun Microsystems公司推出。 - **创始人**:James Gosling,通常被称为“Java之父”。 ##### 1.2 Java的发展史 - **起源**:Java最初被设计用于消费...

    Java软件开发实战 Java基础与案例开发详解 4-6 数组和排序算法章节练习 共4页.pdf

    1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3...

    JAVA经典教材笔记

    #### 第二章:简单Java程序 - 通过编写简单的Java程序来熟悉开发流程和基本语法结构。 #### 第三章:Java基础程序设计 - **Java数据类型** - 基本数据类型:如int、double等。 - 引用数据类型:如String、数组...

    Java软件开发实战 Java基础与案例开发详解 10-9 练习题 共5页.pdf

    #### 1.2 认识Java语言 Java语言具有跨平台性(一次编写,到处运行)、面向对象、健壮性和安全性等特点。它的设计目标是让程序员能够更容易地开发出稳定可靠的软件系统。 #### 1.3 Java平台的体系结构 Java平台...

    Java软件开发实战 Java基础与案例开发详解 18-6 练习题 共5页.pdf

    1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3...

Global site tag (gtag.js) - Google Analytics