JAVA的集合体系,主要由Collection接口,Map接口,Iterator接口和操作集合的工具类Collections组成。其中的Iterator只是一个迭代器,真正的容器则派生自Collection和Map。

Collection是一个根接口,它没有直接的实现类,但是它有三个字接口分别是Set,Queue和List。

Set接口是一种无序,元素不可重复的集合(否则无法区分元素),Set接口重要的实现(子)类是HashSet和TreeSet(非直接实现)

Queue接口模拟队列,遵循FIFO原则,它有个重要子类是ArrayQueue.

List接口是有序,元素可重复的集合,重要实现类有ArrayList.

LinkedList是一个特殊的实现类,同时实现了Queue和List,因此同时拥有队列和链表的功能。

Collect接口提供的通用方法有add(),adAll(),clear(),contains(),isEmpty(),iterator(),remove()

下面是Collection接口类图

Map是一个key-value集合,key是不可以重复的,最常用的Map实现类有HashMap(非线程安全)和TreeMap

下面是Map继承树

下面是摘自oracle官方的图标,Java集合框架体系。(Collections Framework Overview)

  Implementations
Hash Table Resizable Array Balanced Tree Linked List Hash Table + Linked List
Interfaces Set HashSet   TreeSet   LinkedHashSet
List   ArrayList   LinkedList  
Deque   ArrayDeque   LinkedList  
Map HashMap   TreeMap   LinkedHashMap

Iterator 是一个集合元素迭代器,用来替代JDK1.0中的Enumeration,在Collection根接口中, 以类组合的方式定义了一个Iterator<E> iterator()方法,使得Set, Queue和List这三个集合元素都可以通过iterator迭代的方式访问。iterator提供了hasNext(), next(), remove()三个常用方法来访问集合。

注意,使用iterator迭代过程中,不可修改集合元素【即不能直接调用集合的remove()方法】,否则会发生异常;只有调用iterator的remove()方法删除上一次next()返回的元素才可以,如下面的例子。

package collect.iterators;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator; public class Iterators {
public static void main(String[] args) {
Collection<String> books = new HashSet<String>();
books.add("123");
books.add("456");
books.add("789");
Iterator<String> it = books.iterator();
while(it.hasNext()) {
String book = (String)it.next();
System.out.println(book);
if(book.equals("456")) {
it.remove();
//books.remove(book);
}
book = "测试";
}
System.out.println(books);
}
}

执行结果如下

123
456
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at collect.iterators.Iterators.main(Iterators.java:15)

上面这个例子,如果注释掉it.remove(); 而用下面那行books.remove(book);替代的话,将会得到下面的结果。

123
456
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at collect.iterators.Iterators.main(Iterators.java:15)

Collections是一个工具类,提供了对集合的排序,查找,修改以及同步的功能,后面将会详细介绍。

Java基础知识之集合(容器)简介的更多相关文章

  1. Java基础知识:集合框架

    *本文是最近学习到的知识的记录以及分享,算不上原创. *参考文献见链接. 目录 集合框架 Collection接口 Map接口 集合的工具类 这篇文章只大致回顾一下Java的总体框架. 集合框架 ht ...

  2. Java基础知识之集合

    Collection集合 特点:长度可变,只能存储引用类型,可以存储不同的类型的元素 list 特点:元素有序(存储和取出的顺序一致),元素可以重复.list除了可以用迭代器循环遍历之外,因为其是有序 ...

  3. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  4. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  5. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  6. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  7. java基础知识一览(二)

    一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...

  8. Java基础知识-去重

    java基础知识-去掉list集合中的重复元素: 思路: 首先新建一个容器resultList用来存放去重之后的元素 然后遍历sourceList集合中的元素 判断所遍历的元素是否已经存在于resul ...

  9. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

随机推荐

  1. java io读书笔记(3)数值类型的数据

    input stream读取字节:out stream写入字节.Readers读取字符而Writers写入字符.因此,如果我们想理解input和output,我们首先就要明白 java如何处理字节,整 ...

  2. ios app 解决微信扫二维码不能跳转问题

    <script> (function(){ // Setup GA (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i ...

  3. Leetcode: Remove K Digits

    Given a non-negative integer num represented as a string, remove k digits from the number so that th ...

  4. Leetcode: Flatten Nested List Iterator

    Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...

  5. windows 计算机 管理 命令

    compmgmt.msc

  6. 前端新手分析 AJAX执行顺序,数据走向

    我是一名前端的newer 在刚学习AJAX和eJS的时候,对于顺序上面有很大迷惑,现在稍微清楚了一点, 理解不对的地方,还请各位大牛帮助给我指导一下. 总的 服务器和客户端的顺序   一. 除了必要的 ...

  7. c++之路进阶——bzoj3343(教主的魔法)

    F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  gryz2016 Logout 捐赠本站 Notice:由于本OJ ...

  8. CentOs5.2中PHP的升级

    最近一个项目中需要使用到PHP5.2的版本,而服务器上使用了官方的yum源进行安装,默认的版本是5.1.6,需要升级.但是因为不是一个非常 正式的服务器环境,所以想通过简单的yum update一下了 ...

  9. 在TextView上加上下划线或中划线

    在做商城项目是需要用到原价格以及降价后的价格,不可避免用到下划线或中划线  textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下 ...

  10. OpenStack 物理资源问题

    Contents [hide] 1 写在前面 2 openstack的自有设置 3 解决办法 4 最终解决办法 写在前面 物理CPU核数为12,能虚拟多少虚拟核的机器?openstack的默认使用no ...