Map 和 Set关系

Map和Set事实基础的朋友,有着千丝万缕的联系。

Map它可以被看作是Set延期。从何时起Set内容存储在key-value的值当表单。这个Set实际上可以作为Map使用。反过来,Map事实上,有一个Map.Entry内部接口。而Map在存放值对时,全然不考虑value,而仅仅考虑key,因此Map也能够看成是一个存key的Set,而value仅仅是key的附属物。

HashMap加入元素时,依据key的hashCode进行再哈希计算得到值来决定存放位置。HashMap底层有个数组Entry[],依据hash值来决定key-value存在数组的哪个元素,而Entry[]实际上是一个table。

HashSet底层是居于HashMap来实现的。HashSet底层用HashMap来保存全部元素,这些元素作为HashMap的key,而相应的Value是一个名为PRESENT的static final的Object对象。对HashSet操作的方法都调用HashMap的方法进行操作。

元素是否反复,要同一时候推断元素对象的hashCode()和equals(),hashCode相等且equals返还true时才觉得是反复元素,不进行替换。

TreeSet和TreeMap的关系也是非常相似的,即TreeSet底层是採用TreeMap存储的。TreeMap採用红黑树的排序二叉树来保存Map中的每一个Entry(树节点)。

List的三个实现:ArrayList,Vector和LinkedList。

Vector还有个儿子Stack,Stack不过在Vector的基础上加入了5个方法,只五个方法的代码就将Vector变成了Stack,Stack依旧是一个Vector,它继承了Vector的synchronized血统,都是线程安全的。从JDK1.6開始,Java提供了Deque接口并提供了实现类ArrayDeque,即使程序中须要栈这种数据结构,也不推荐使用Stack而推荐使用Deque。除非要求线程安全。

Deque是双端队列。是队列但同一时候拥有栈的功能。底层都是数组实现。

Vector差点儿被ArrayList取代了,它唯一的优点是线程安全。

如今甚至为了线程安全也不用Vector了。能够通过Collections工具类的synchronizedList()方法将一个普通的ArrayList包装成线程安全的ArrayList。

ArrayList 和LinkedList

ArrayList底层是基于数组实现的。所以ArrayList创建的时候有个初始的capacity,提供了构造方法,编程者能够在创建ArrayList时指定初始的capacity。假设没有显式提供capacity,那么程序默认设置为10.LinkedList是双向列表存储结构,不仅实现List接口,还实现Deque双端队列接口。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Java一些八卦集合类的更多相关文章

  1. java中的集合类总结

    在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现,我在使用和面试的时候频 频遇到这样的“抉择” . :)(主要还是面试的时候) 久而久 ...

  2. Java:Collection集合类

    特点:只能用于存储对象,集合长度时可变的,集合可以存储不同类型的对象. 数组和集合类同时容器,不同的是: 1.数组虽然也可以存储对象,但是长度是固定的:集合长度时可变的. 2.数组中可以存储基本数据类 ...

  3. Java中的集合类

    实线边框的是实现类,比如ArrayList,LinkedList,HashMap等 折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等, ...

  4. Java API ——Collection集合类 & Iterator接口

    对象数组举例: 学生类: package itcast01; /** * Created by gao on 15-12-9. */ public class Student { private St ...

  5. java复习(7)---集合类、泛型

    本节主要结合用例讲述Java中Map类.Set类.List类如何使用. Java中有封装好的集合类,常用的有Map类.Set类.List类,简单说明一下他们的用法. List类,常用有ArrayLis ...

  6. java基础(8) -集合类-Collecion

    集合类-Collecion Collection接口 常用方法 //添加新元素 boolean add (E element); //返回迭代器 Iterator<E> iterator( ...

  7. 你必须知道的几种java容器(集合类)

    一.基本概念 Java容器类类库的用途是“持有对象”,并将其划分为两个不同的概念: 1)Collection:一个独立元素的序列,这些元素都服从一条或者多条规则. List必须按照插入的顺序保存元素, ...

  8. Java 学习之集合类(Collections)

    Collection(集合类) 我们是使用数组来保存数据,但是他的长度一旦创建,就已经确定了,当我们要动态传入穿值,数组就有些局限了,集合类就孕育而生:所谓集合,就是来保存,盛装数据,也可称为容器类: ...

  9. 转载的,讲解java.util的集合类

    本文是转载的 http://www.ibm.com/developerworks/cn/java/j-lo-set-operation/index.html#ibm-pcon 在实际的项目开发中会有很 ...

随机推荐

  1. wireshark教程

    Wireshark世界上最流行的网络分析工具. 这个强大的工具能够捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息.与非常多其它网络工具一样.Wireshark也使用pcap network ...

  2. tb连续aaaaa123aaa自适应

    在连续的字符串数字中,td不会自适应大小,需要加上样式 style="word-break : break-all; overflow:hidden; " <table> ...

  3. ASP.NET回车提交事务

    浅析ASP.NET回车提交事件[转] ASP.NET回车提交事件其实说到底并不是ASP.NET 的编程问题,却是关于html form 中的submit 按钮就是如何规划的具体讨论. 也可归于ASP. ...

  4. Java 8 时间日期库的20个使用示例

    java 8是如何处理时间及日期的 有人问我学习一个新库的最佳途径是什么?我的回答是,就是在实际项目中那样去使用它.在一个真实的项目中会有各种各样的需求,这会促使开发人员去探索和研究这个新库.简言之, ...

  5. Linux安装jdk 8和环境变量配置

    1.下载jdk 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.将刚刚 ...

  6. web:转盘抽奖

    移动web:转盘抽奖(幸运大转盘)   为了获取客户.回馈客户,平台一般会推出抽奖活动类的营销页.因此web页面中,有各式各样的抽奖效果. 格子式(九宫格),背景滚动式(数字/文字/图案),旋转式(转 ...

  7. hdu 5092 Seam Carving

    这道题 我没看出来 他只可以往下走,我看到的 8-connected :所以今天写一下如果是 8-connected 怎么解: 其实说白了这个就是从上到下走一条线到达最后一行的距离最小: 从Map[a ...

  8. c#操作appsettiongs

    try { //指定要修改的配置文件的路径 Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWe ...

  9. OpenGL之路(八)加入�光照效果和键盘控制

    在opengl中加入�光照的效果,可用键盘控制放大缩小 w键放大 s键缩小 d键开关灯 预览效果例如以下: 源代码例如以下: #include <gl/glut.h> #include & ...

  10. 用友财务总帐(GL)模BI数据ETL分析

    业务需求,如下面的: 现在用友总帐一家公司BI分析案例. /* Sql Server2012使用作业设置定时任务,为了保证有一天运行时间 */ /* 意temp1表里一定要保证要有记录,否则以temp ...