对java的集合一直是停留在使用的角度,没有进行系统的归纳,趁现在比较空闲,归纳一下。

1  集合的层次关系

最顶层的有三个集合,其中一个类,两个接口, 一个类是Arrays,两个接口是Collection和Map

Arrays将数字和对象联系起来。

Collection的直接接口有List, Set,Queue。 Arraylist, Vector扩展了抽象类AbstractList,并且实现了List接口,  LinkedList实现了AbstractSequentialList,并且实现了Queue和List接口。stack扩展自Vector类,set的之类有hashset和treeset, LinkedHashSet是对HashSet的扩展,同理,LinkedHashMap是对HashMap的扩展。

LinkList实现了queue接口, 所以有poll, offer等功能。ArrayList中有两个成员变量,E[]和size, LinkedList有两个成员变量,Entry<E> header 和size, Entry就是LinkedList的节点类型,它有三个成员变量,data, Entry<E> next, Entry<E> previous。  两种List都有indexof,  lastindexof等功能,这和String类比较相似,所以从某种意义上说,String是ArrayList<Char>类型的结构,因为都是对一个数组的封装。ArraysList默认size是10,再次扩容为上次的50%,LinkedList的header节点的previous放的是最后一个节点的节点的引用,所以也可以说LinkedList是环形链表。

Stack, Vector, HashTable都是线程安全的,《java编程思想》中建议不要再使用,不知道什么原因,可能是大多数情况下不需要考虑线程安全,需要的时候,可以使用Collections.synchronizedList(new ArrayList())来替代, stack用LinkedList代替,HashTable用HashMap替代,Vector用ArraysList替代。

其中Collection extends Iterable, Iterable只有一个成员变量Iterator<T>, 而Arrays和Map没有扩展Iterable接口,所以只有Collection的之类才能包含Iterator, 但是Map中的values(),keySet()等方法能使用Iterator,是因为这些方法返回的是Collection的集合。

2   各个集合的特点(来自java编程思想)

  1. List. ArrayList 和LinkedList都是按照被插入的顺序保存元素,在性能上,ArrayList利用索引号访问集合元素,所以比较适合随机访问元素;LinkedList基于链表的结构,在插入和删除方面性能比ArrayList高,并提供了顺序访问的优化,在顺序访问上,性能和ArrayList相差无几,但是随机访问方面比较慢。
  2. Set.  HashSet, TreeSet, LinkedHashSet,set是不重复的, 获取最快的是HashSet,但是不按照存放先后进行存储; TreeSet会按照比较结果的升序保存对象;LinkedHashSet按照被添加的顺序保存对象。
  3. Map. HashMap, TreeMap, LinkedMap, 与Set一样, HashMap提供了最快的查询速度,TreeMap提供了按照比较结果的升序进行保存key值,LinkedHashMap按照插入的顺序保存Key, 并且保存了HashMap的查询速度。

java 集合归类的更多相关文章

  1. Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]

    Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...

  2. JAVA 集合 List 分组的两种方法

    CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...

  3. 入职大厂,齐姐精选的 9 道 Java 集合面试题

    Java 集合框架其实都讲过了,有一篇讲 Collection 的,有一篇讲 HashMap 的,那没有看过的小伙伴快去补下啦,文末也都有链接:看过的小伙伴,那本文就是检测学习成果的时候啦 今天这篇文 ...

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

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

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

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

  6. java集合你了解多少?

    用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...

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

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

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

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

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

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

随机推荐

  1. js节点问题

    转载 http://dwt1220.blog.51cto.com/1028523/745402 本文出自 “dwt1220” 博客,请务必保留此出处http://dwt1220.blog.51cto. ...

  2. robotframework笔记22

    创建测试库 支持的编程语言 机器人框架本身是用写的 Python 和自然的测试 库扩展它可以使用相同的实现 语言. 运行时框架上 Jython ,图书馆也可以 实现使用 Java . 纯Python代 ...

  3. IIS 安装 pydio

    Introduction In this how-to, we’ll see the installation of Pydio (Put Your Data In Orbit), which is ...

  4. C# Form内存回收

    namespace WebBrowserMemoryTest { public partial class Form1 : Form { private int _Pages; public Form ...

  5. Vim学习指南

    你想尽可能快地自学vim(为大家所熟知的最好的编辑器) .这是我学习的方法:从细处入手然后慢慢掌握所有技巧. Vim 六十亿美元的编辑器 设计优良,强壮,快速. 学习vim并把它作为你的下一个文本编辑 ...

  6. 为学Linux 我看了这些书

    去年开始,抱着学习的态度开始了我的Linux学习,到现在,差不多一年了,收获很多,不敢说精通Linux,但是,还是对得起“略懂”这两个字的.这一年里我看了很多书,细细数下,大概15本左右,其中包含了两 ...

  7. Linux基础: 网络命令和进程管理

    ​  netstat lsof ps pstree pkill/kill (了解jenkins git,排查环境) 查询服务器之间是否有链接(netstat -an) 某个服务是否启动(了解服务对应的 ...

  8. hdu 4009 Transfer water(最小型树图)

    Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)To ...

  9. hdu---(3779)Railroad(记忆化搜索/dfs)

    Railroad Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  10. 开源牛人 zcbenz

    事情是这样的,微软推出了Visual Studio Code,我很好奇他怎么做跨平台的,所以就找找资料,在他的网站中是这么描述的: Architecturally, Visual Studio Cod ...