对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. Android Service与Thread的区别

    Android Service,后台,Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程序被关闭,只要进程还在,Service就可以继续运行.比如说一些应用程序 ...

  2. 一些简单css3效果的整理

    代码: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  3. jq手风琴---点击时列表的左边距逐渐减小

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. PLI与Pillow

    PIL概念 XXXXX 注意 PIL不兼容setuptools.   Pillow概念 Pillow(PIL fork)是用来处理raster图像的Python图像库,即像素数据的矩阵. 查阅PIL的 ...

  5. [Jetty] jetty 内存调优

    在start.ini中配置代码如下 -Dcom.sun.management.jmxremote=true -Xmx6144m -XX:PermSize=256M -XX:MaxPermSize=10 ...

  6. sina 行情api

    http://blog.csdn.net/simon803/article/details/7784682

  7. LeetCode 423. Reconstruct Original Digits from English——学会观察,贪心思路

    Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...

  8. Computer Science Courses – Yan Yan

    CS: Compilers / Programming Languages Course Title Fundamentals of C++ Language Programming Textbook ...

  9. java版复利计算

    这是我修改为java的初定界面,还有很多细节问题还没有解决,希望老师可以给我多点的点评,接下来继续努力,我会把每一次的进步发上来,不断的去锻炼. 1.我所用的开发工具是ecipse 2.所有的语言为j ...

  10. bzoj 1823: [JSOI2010]满汉全席

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; ],next[ ...