java 集合归类
对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编程思想)
- List. ArrayList 和LinkedList都是按照被插入的顺序保存元素,在性能上,ArrayList利用索引号访问集合元素,所以比较适合随机访问元素;LinkedList基于链表的结构,在插入和删除方面性能比ArrayList高,并提供了顺序访问的优化,在顺序访问上,性能和ArrayList相差无几,但是随机访问方面比较慢。
- Set. HashSet, TreeSet, LinkedHashSet,set是不重复的, 获取最快的是HashSet,但是不按照存放先后进行存储; TreeSet会按照比较结果的升序保存对象;LinkedHashSet按照被添加的顺序保存对象。
- Map. HashMap, TreeMap, LinkedMap, 与Set一样, HashMap提供了最快的查询速度,TreeMap提供了按照比较结果的升序进行保存key值,LinkedHashMap按照插入的顺序保存Key, 并且保存了HashMap的查询速度。
java 集合归类的更多相关文章
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...
- JAVA 集合 List 分组的两种方法
CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...
- 入职大厂,齐姐精选的 9 道 Java 集合面试题
Java 集合框架其实都讲过了,有一篇讲 Collection 的,有一篇讲 HashMap 的,那没有看过的小伙伴快去补下啦,文末也都有链接:看过的小伙伴,那本文就是检测学习成果的时候啦 今天这篇文 ...
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- java集合你了解多少?
用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...
- 深入java集合学习1-集合框架浅析
前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
随机推荐
- javascript图片切换
JavaScript 图片滑动切换效果 作者:cloudgamer 时间: 2009-09-25 文档类型:原创 来自:蓝色理想 第 1 页 JavaScript 图片滑动切换效果 [1] 第 2 页 ...
- 浅谈AsyncState与AsyncDelegate使用的异同
对于AsyncState来说,其MSDN的解释为:得到BeginInvoke方法的最后一个参数.而对于AsyncDelegate来说,其MSDN的解释为:得到异步调用的委托对象.也就是异步调用的委托源 ...
- hdu----(2586)How far away ?(DFS/LCA/RMQ)
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- ztree edit_super
<SCRIPT type="text/javascript"> var setting = { view : { addHoverDom : addHoverDom, ...
- 233. Number of Digit One *HARD* -- 从1到n的整数中数字1出现的次数
Given an integer n, count the total number of digit 1 appearing in all non-negative integers less th ...
- XML中的非法字符转化成实体
问题 如果XML有非法字符比如 "·",或者HTML标签<br/>.XML在解析的过程中就会出错.就无法正常解析,或者把xml反射成实体. 有些字符,像(<)这类 ...
- linux在shell date获取时间的相关操作
获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用 ...
- JNI的一些知识:
JNI字段描述符"([Ljava/lang/String;)V" 2012-05-31 12:16:09| 分类: Android |举报|字号 订阅 "([Ljava/ ...
- 第三章 XHTML 表单
1.表单的主要作用在于在网页上提供一个图形用户界面,以采集和提交用户输入的数据. 2.HTML表单元素和属性可以分为两种类型:定义表单整体结构,使浏览器知道如何处理表单数据的元素:创建输入控件的元素. ...
- OLAP vs OLTP: what makes the difference
OLAP vs OLTP: what makes the difference OLPT and OLAP are complementingtechnologies. You can't live ...