用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获。

一、所有集合都实现了Iterable接口。

Iterable接口中包含一个抽象方法:Iterator<T> iterator();每个实现了这个方法的集合都会返回一个Iterator对象。

Iterator:它包含三个方法,hashNext(),next(),remove()三种方法,通过它们可以实现集合的遍历和元素删除,例如:

Collection<String> list = new ArrayList<String>();

  list.add("a");

   list.add("b");

    list.add("c");

Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {

         String element = iterator.next();

    System.out.println(element);//a b c

}

System.out.println(list);//[a, b, c]      iterator = list.iterator();    iterator.next();

iterator.remove();

System.out.println(list);//[b, c]

ps:为什么不直接实现Iterator接口呢?因为:Iterator会携带当前集合的位置信息,下次使用再使用的时候就非从0开始了;而Iterable接口每次都返回一个Iterator对象(通过内部类实现Iterator),各个迭代器之间互不影响。

二、ListIterator

从AbstractList起封装了public ListIterator<E> listIterator()方法,返回一个ListIterator,它在Iterator的基础上增加了add(),previous(),hasPrevious()等方法,可以实现双向遍历。

AbstractList<String> list = new ArrayList<String>();

list.add("a");

list.add("b");

list.add("c");

ListIterator<String> iterator = list.listIterator(3);

while (iterator.hasPrevious()) {

String element = iterator.previous();

System.out.println(element);//c,b,a

}

三、比较

    ArrayList:允许存放重复元素,且元素是有序的,随机访问比较方便。

LinkedList:链表实现,插入和删除时更优于ArrayList。

HashSet:不允许重复元素且无序(散列函数对元素进行排序,可快速查询),允许null值。

TreeSet:红黑树排序,可进行排序,包含的元素要实现Comparable接口并定义compareTo方法,不允许null值。

HashMap:线程不安全,key和值都允许null,判断是否包含key要使用containsKey()方法,不允许重复key,hash数组的默认大小是16,而且一定是2的指数,重新计算hash值。

HashTable:线程安全,key和value都不允许出现null值,不允许重复key,数组默认大小是11,增加的方式是 old*2+1,使用包含对象的hash值。

四、Collections和Arrays

Collections:java.util下的一个专用类,它包含有各种有关集合操作的静态方法,可实现对各种集合的搜索、排序、线程安全化等操作。

Arrays:java.util下的一个专用类,用来操作array ,提供搜索、排序、复制,转换等静态方法。

关注老姜谈技术,微信号:helojava,或者扫描下面二维码。


每日一帖,技术鸡汤。

java集合你了解多少?的更多相关文章

  1. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  2. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  3. 深入java集合学习1-集合框架浅析

    前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...

  4. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  5. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  6. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  7. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

  8. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

  9. 深入java集合系列文章

    搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...

随机推荐

  1. 在centos7上安装ClamAV杀毒,并杀毒(centos随机英文10字母)成功

    前言 上传文件的时候发现总是失败,查看top发现有个进程一直cpu占用80%以上,而且名称还是随机数.kill之后,一会儿又重新生成了.突然发现居然没有在服务端杀毒的经历.在此处补齐. 安装clama ...

  2. 代码的坏味道(15)——冗余类(Lazy Class)

    坏味道--冗余类(Lazy Class) 特征 理解和维护类总是费时费力的.如果一个类不值得你花费精力,它就应该被删除. 问题原因 也许一个类的初始设计是一个功能完全的类,然而随着代码的变迁,变得没什 ...

  3. 云计算下PAAS的解析一

    云计算下PAAS的解析一       PaaS是Platform-as-a-Service的缩写,意思是平台即服务. 把服务器平台作为一种服务提供的商业模式.通过网络进行程序提供的服务称之为SaaS( ...

  4. JavaScript对象和数组

    1.JavaScript中有两个非常重要的数据类型是对象和数组. 通过"."或者"[]"来访问对象属性 举例:var book = { topic:" ...

  5. 我的MYSQL学习心得(十) 自定义存储过程和函数

    我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心 ...

  6. 在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)

    [题外话] 闲的无聊竟然想尝试测试自己做的项目在不同操作系统上的性能表现,所以决定试试在Linux上部署Apache和Mono的环境.由于平时很少接触Linux,所以从网上找了几篇文章(附在相关链接中 ...

  7. Akka.NET v1.0 已发布,支持Mono

    Akka.NET 是Java/Scala 流行框架Akka的一个 .NET 开源移植.可用于构建高并发,分布式和容错事件驱动的应用在 .NET 和 Mono 平台之上.Akka.NET 经过一年多的努 ...

  8. 应用r.js来优化你的前端

    r.js是requireJS的优化(Optimizer)工具,可以实现前端文件的压缩与合并,在requireJS异步按需加载的基础上进一步提供前端优化,减小前端文件大小.减少对服务器的文件请求.要使用 ...

  9. WCF学习之旅—基于ServiceDebug的异常处理(十七)

    WCF学习之旅—WCF中传统的异常处理(十六) 二.基于ServiceDebug的异常处理 从前面的示例中,可以看到客户端捕获了异常,这是我们处理异常的前提.为了有利于我们进行有效的调试,WCF提供了 ...

  10. H5拍照应用开发经历的那些坑儿

    一.项目简介 1.1.项目背景:这是一个在移动终端创新应用的项目,用户在浏览器端(微信/手Q)即可完成与金秀贤的合影,希望通过这样一种趣味体验,引发用户的分享与转发的热潮. 1.2.系统要求:ios6 ...