java集合学习一
首先看一下java集合的关系图
1.1从全面了解Java的集合关系图。常见集合 list set map等其中我们最常用的 list map 结合。几天说一下常见的map。map在我工作的两年里伴随着走过了好久,虽然用的很频繁,今天是第一次开始系统的整理map。

1.2 这里分析的map 都是util包下面的,不包含concurrent包下面的。
常用的map实现类有 hashmap,treemap等。这一篇主要从事系统说一下hashmap的用法,和从源码的角度说一下hashmap的底层实现,hashmap 线程不安全的问题。
hashmap的主要作者Doug Lea,也是一个大神,膜拜一下。
1.2.1 看一下hashmap 的继承和实现关系,继承于AbstractMap 实现了Map Cloneable Serializable 接口如下图
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
可以看出hashmap 和map AbsatractMap的关系,实现了克隆和序列化。序列化是在hashmap 里面自己实现的方法readObject,writeObject(这里要说一下集合类应为有空的为了站位置,序列化得时候要吧这些都去掉,和hash的不同平台不一定一样)
1.2.2 hashmap的实现结构,hashmap就是一个Entry的数组,数组默认的初始长度是16*0.75=12;
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
/**
* Constructs an empty <tt>HashMap</tt> with the default initial capacity
* (16) and the default load factor (0.75).
*/
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR;
threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
table = new Entry[DEFAULT_INITIAL_CAPACITY];
init();
}
我们再看看Entry,他是一个hashmap 的内部类,并实现了Map内部类的Entry方法。 的结构就知道Hashmap是真么放置key 和value。 Entry 里面是有一个 value next key hash 这是一个链表的结构体,
static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        final int hash;
        /**
         * Creates new entry.
         */
        Entry(int h, K k, V v, Entry<K,V> n) {
            value = v;
            next = n;
            key = k;
            hash = h;
        }
    }
从上面我们可以看出 hashmap的结构就是一个数组,数组里面放着一个链表的头指针或者null。如下图所示

然后就是put(k,v) get(k),resize(n)的方法在下一章会继续。。。。。
java集合学习一的更多相关文章
- 转:深入Java集合学习系列:HashSet的实现原理
		
0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特 ...
 - 2019/3/4  java集合学习(二)
		
java集合学习(二) 在学完ArrayList 和 LinkedList之后,基本已经掌握了最基本的java常用数据结构,但是为了提高程序的效率,还有很多种特点各异的数据结构等着我们去运用,类如可以 ...
 - 2019/3/2周末 java集合学习(一)
		
Java集合学习(一) ArraysList ArraysList集合就像C++中的vector容器,它可以不考虑其容器的长度,就像一个大染缸一 样,无穷无尽的丢进去也没问题.Java的数据结构和C有 ...
 - Java集合学习(9):集合对比
		
一.HashMap与HashTable的区别 HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.Hash ...
 - java集合学习(2):Map和HashMap
		
Map接口 java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map. Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含 ...
 - 深入java集合学习1-集合框架浅析
		
前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...
 - Java集合学习总结
		
java集合 collection public interface Collection<E> extends Iterable<E> List public interfa ...
 - Java 集合学习--HashMap
		
一.HashMap 定义 HashMap 是一个基于散列表(哈希表)实现的键值对集合,每个元素都是key-value对,jdk1.8后,底层数据结构涉及到了数组.链表以及红黑树.目的进一步的优化Has ...
 - java集合学习(1):集合框架
		
集合 Collection(有时候也叫container)是一个简单的对象, Java集合工具包位于Java.util包下,Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工 ...
 
随机推荐
- javascript exec方法
			
题目 取出 "[大哭][尴尬][发怒][发怒][调皮][调皮][呲牙]" 串中[]里面的东西 思路 正则匹配,/\[(.+?)\]/ig; exec方法循环 exec() 方法的功 ...
 - lucene和egg项目的异同点
			
1 和lucene一样 支持全域索引 2 对字符串域提供全文检索,对数字类型域提供范围查询 3 采取和lucene类似的倒排表压缩方式 4 和lucene的多级跳转表不同,egg采取的是B+树做索引, ...
 - springMVC与struts2的区别
			
1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能:spring会稍微比struts快.spring mvc是基于方法的设 ...
 - oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT_数据库的几种锁
			
问题如下: SQL> conn scott/tiger@vm_databaseConnected to Oracle Database 11g Enterprise Edition Releas ...
 - php & 引用
			
引用的作用: 如果程序比较大,引用同一个对象的变量比较多,并且希望用完该对象后手工清除它,个人建议用 "&" 方式,然后用$var=null的方式清除. 其它时候还是用ph ...
 - 一步一步实现iOS微信自动抢红包
			
微信红包 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能. 此教程所需要的工具/文件 yololib class-dump dumpdecrypte ...
 - spring WebServiceTemplate 调用 axis1.4 发布的webservice
			
前言: 最近在开发中需要调用对方的 webservice服务,按照现有的技术,本应该是一件很简单的事情,只需要拿到wsdl文件,生成客户端代码即可,但是,对方的webservice服务是06年用ax ...
 - 转js contains 方法
			
function Jcontains(root, el) { if (root.compareDocumentPosition) return root === el || !!(root.compa ...
 - Java学习笔记——JDK1.7的新特性。
			
1,switch中可以使用字串 Java代码: String s = "test"; switch (s) { case "test" : System.out ...
 - vb6.0如何让窗体跟随鼠标运动
			
首先将form的boderstyle属性设为0 Dim movesScreen As Boolean Dim mousX As Integer Dim mousY As Integer Dim cur ...