List、Set、Map的源码初级分析

Set、Map、List都是利用利用大量的泛型的。

List和Set都是继承collection接口的。而Map是没有继承任何的接口的。

public interface List<E> extends Collection<E>
public interface Set<E> extends Collection<E> {
public interface Map<K,V> {

Map源码描述:一个有键值对的对象。一个map不能包含重复的键值对。每一个键最多只能匹配一个值。这个借口可以取代Dictionary类。Dictionary类是一个抽象类而不是一个接口。

原文:

* An object that mapskeys to values.  A map cannot containduplicate keys;

* each key can map to at most one value.

*

* <p>This interface takes the place of the<tt>Dictionary</tt>
class, which

* was a totally abstract class rather than aninterface.

List源码描述:一个有序的Collection(作为sequence也是被广为人知),使用List接口的用户能够精确控制在插入的元素的位置。用户可以通过下标来访问和查询里面的元素。List和Set不同,能够插入重复的数据。

原文:

An ordered collection(also known as a<i>sequence</i>).  The user ofthis

* interface has precise control over where inthe list each element is

* inserted. The user can access elements by their integer index (position in

* the list), and search for elements in thelist.<p>

*

* Unlike sets, lists typically allow duplicateelements.

Set:一个不会包含相同元素的Collection。更加准确的讲,Set是不会包含一对像能够e1.equals(e2)的这样元素,还有至多只有一个空元素。正如它名字所指出的,这个接口模拟数学上的集合的概念。

原文:

A collection thatcontains no duplicate elements.  Moreformally, sets  contain no pair ofelements e1 and e2 such that e1.equals(e2), and at most one null element.  As implied by its name, this interface modelsthe mathematical
setabstraction.

再看下他们实现类ArrayList和HashMap的源码,会发现ArrayList里面

封装的是一个Object数组,HashMap是封装一个内部类的数组

ArrayList的构造方法部分:

public ArrayList(int initialCapacity) {
initialCapacity);
		………
        this.elementData = new Object[initialCapacity];
    }

它实例化的时候,默认数组大小为10:

public ArrayList() {
        this(10);
}

HashMap里面不是利用Object进行封装,而是有一个内部类Entry:

构造方法里面有一句:

table = new Entry[capacity];
static final int DEFAULT_INITIAL_CAPACITY = 16;

默认容量是16

时间: 2024-10-14 06:56:21

List、Set、Map的源码初级分析的相关文章

Hadoop-2.4.1学习之Map任务源码分析(下)

在Map任务源码分析(上)中,对MAP阶段的代码进行了学习,这篇文章文章将学习Map任务的SORT阶段.如果Reducer的数量不为0,则还需要进行SORT阶段,但从上面的学习中并未发现与MAP阶段执行完毕调用mapPhase.complete()类似的在SORT阶段执行完毕调用sortPhase.complete()的源码,那SORT阶段是在什么时候启动的?对于Map任务来说,有输入就有输出,输入由RecordReader负责,输出则由RecordWriter负责,当Reducer的数量不为0

监听器初始化Job、JobTracker相应TaskTracker心跳、调度器分配task源码级分析

JobTracker和TaskTracker分别启动之后(JobTracker启动流程源码级分析,TaskTracker启动过程源码级分析),taskTracker会通过心跳与JobTracker通信,并获取分配它的任务.用户将作业提交到JobTracker之后,放入相应的数据结构中,静等被分配.mapreduce job提交流程源码级分析(三)这篇文章已经分析了用户提交作业的最后步骤,主要是构造作业对应的JobInProgress并加入jobs,告知所有的JobInProgressListen

TableInputFormat分片及分片数据读取源码级分析

我们在MapReduce中TextInputFormat分片和读取分片数据源码级分析 这篇中以TextInputFormat为例讲解了InputFormat的分片过程以及RecordReader读取分片数据的过程.接下来咱们分析TableInputFormat的分片信息和数据读取过程. TableInputFormat这是专门处理基于HBase的MapReduce的输入数据的格式类.我们可以看看继承结构:(1)public class TableInputFormat extends Table

RxJava &amp;&amp; Agera 从源码简要分析基本调用流程(2)

版权声明:本文由晋中望原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/124 来源:腾云阁 https://www.qcloud.com/community 接上篇RxJava && Agera 从源码简要分析基本调用流程(1)我们从"1.订阅过程"."2.变换过程"进行分析,下篇文章我们继续分析"3.线程切换过程" 3.线程切换过程 从上文中我们知道了R

Flume-NG内置计数器(监控)源码级分析

Flume的内置监控怎么整?这个问题有很多人问.目前了解到的信息是可以使用Cloudera Manager.Ganglia有图形的监控工具,以及从浏览器获取json串,或者自定义向其他监控系统汇报信息.那监控的信息是什么呢?就是各个组件的统计信息,比如成功接收的Event数量.成功发送的Event数量,处理的Transaction的数量等等.而且不同的组件有不同的Countor来做统计,目前直到1.5版本仍然只对三大组件:source.sink.channel进行统计分别是SourceCount

DispatcherServlet源码注解分析

DispatcherServlet的介绍与工作流程 DispatcherServlet是SpringMVC的前端分发控制器,用于处理客户端请求,然后交给对应的handler进行处理,返回对应的模型和视图,视图解析器根据视图名称进行视图渲染,然后返回给DispatcherServlet,该分发servlet将渲染好的视图页面呈现给用户. 工作流程图 下面是对DispatcherServlet的源码注解分析,后期将会不断完善 1 /* 2 * Copyright 2002-2017 the orig

JDK1.7&amp;1.8源码对比分析【集合】ConcurrentHashMap

前言 在JDK1.7&1.8源码对比分析[集合]HashMap中我们对比分析了JDK1.7和1.8版本的HashMap源码,趁热打铁,这篇文章就来看看JDK1.7和1.8版本的ConcurrentHashMap有哪些区别. 目录 一.对比分析 1. 1.7版本 2. 1.8版本 一.对比分析 1. 1.7版本 先来看看 1.7 的实现,下面是他的结构图: 如上图所示,是由 Segment 数组.HashEntry 组成,和 HashMap 一样,仍然是数组 + 链表. 它的核心成员变量: /**

Java7/8 中 HashMap 和 ConcurrentHashMap源码对比分析

网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清楚.终归是希望能降低大家学习的成本,不希望大家到处找各种不是很靠谱的文章,看完一篇又一篇,可是还是模模糊糊. 阅读建议:四节基本上可以进行独立阅读,建议初学者可按照 Java7 HashMap -> Java7 ConcurrentHashMap -> Java8 Ha

HashMap源码阅读分析(JDK1.8)

HashMap是JDK提供的经典容器之一,最近刚好时间充裕,于是自己看了一遍hashMap的源码实现,不同版本的JDK,HashMap的实现方式有所不同,本文主要针对JDK1.8的源码进行分析,至于各版本实现方式的不同,本文不做讨论,下面直接开始. 一.hash函数分析 map的put方法,首先调用的就是hash函数,返回key的hash值,其函数方法如下: static final int hash(Object key) { int h; return (key == null) ? 0 :