Collection:

ArrayList:
1:底层实现是数组,默认长度是10.
2:add(),判断是否数组越界,是数组扩容为原来的两倍。
3:remove(),copy数组,size-1,释放空虚的空间。

HashSet:
底层实现是一个HashMap,把值存在map的key上,value存的是一个object对象,就是说底层的HashMap中value都是一样的。
HashSet是无序的,不允许重复。

LinkedHashSet:
基础自HashSet,底层实现是一个LinkedHashMap,通过equals()方法比较两个对象是否相等,初始容量16,加载因子0.75f.
使用链表维护数据的顺序,所有说是有序,不重复的,对象都是存在底层map的key上,所有允许有且只有一个对象为null。

LinkedList:
1.LinkedList基于链表实现
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.查找操作indexOf,lastIndexOf,contains等,两者差不多。

Map:

HashMap:
初始容量值:10,加载因子0.75f.
put()第一个对象的时候,进行初始化,容量12。
其底层是一个Entry数组,根据hash值,算法决定object val 对象存在Entry数组的位置。
注意点在用Iterator进行遍历map的时候,在遍历过程中不能调用remove()方法,否则会报错。
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:922)
at java.util.HashMap$EntryIterator.next(HashMap.java:962)
at java.util.HashMap$EntryIterator.next(HashMap.java:960)

原因:
在获得hashmap的迭代器的时候,构造器中会把expectedModCount = modCount;modCount:(记录map增加,删除,modCount+1)
在迭代过程中如何调用remove() or add()方法,modCont+1,在iterator.next()的时候会去比较expectedModCount与modCont是否相等,不等,报错。

源码:

LinkedHashMap:
初始容量16,加载因子0.75f.
一个有序的map。继承HashMap,LinkedHashMap并未重写父类HashMap的put方法,而是重写了父类HashMap的put方法调用的子方法void addEntry(int hash, K key, V value, int bucketIndex) 和void createEntry(int hash, K key, V value, int bucketIndex),提供了自己特有的双向链接列表的实现。

java常用集合框架底层实现简介与注意点的更多相关文章

  1. java常用集合框架关系

    一.综合总图 1.所有集合类都位于java.util包下. 2.Java的集合类主要由两个接口派生而出:Collection和Map, 3.Collection和Map是Java集合框架的根接口,这两 ...

  2. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  3. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  4. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  5. java的集合框架set 和map的深入理解

    Java的集合框架之Map的用法详解 Map有两种比较常用的实现:HashMap 和 TreeMap. HashMap: HashMap 也是无序的,也是按照哈希编码来排序的,允许使用null 值和n ...

  6. Java常用日志框架介绍

    Java常用日志框架介绍 java日志概述 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.java领域存在多种日志框架,目前常用的日志框架包括L ...

  7. Java常用日志框架介绍(转)

    Java常用日志框架介绍 java日志概述 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.java领域存在多种日志框架,目前常用的日志框架包括L ...

  8. Java 高级-集合框架

    参考资料 参考 HashMap 类似 C++ 中的 STL 标准模板库,Java 也在 java.util 包中封装了一套常用数据结构及其算法,称为集合框架.所有的集合框架都包含如下内容: 接口:代表 ...

  9. Java常用集合笔记

    最近事情比较少,闲暇之余温习巩固一下Java的一些基础知识,并做一些笔记, Java常用集合, 主要参考的这篇文章:Java常用集合 ArrayList/Vertor 1. ArrayList 的主要 ...

随机推荐

  1. opencv的图片的灰度处理‘

    #include "stdafx.h" //实现将彩色图片转换成灰度图 int _tmain(int argc, _TCHAR* argv[]){ IplImage *image; ...

  2. 开大你的音响,感受HTML5 Audio API带来的视听盛宴

    话说HTML5的炫酷真的是让我爱不释手,即使在这个提到IE就伤心不完的年代.但话又说回来,追求卓越Web创造更美世界这样高的追求什么时候又与IE沾过边儿呢?所以当你在看本文并且我们开始讨论HTML5等 ...

  3. Unity3D NGUI刮刮卡效果

    线上效果 确保你的纹理的read/write 是勾选的,纹理格式是 RGBA32的 //代码 using UnityEngine; [RequireComponent(typeof(UITexture ...

  4. 转一篇介绍Web session概念的文章

    说的非常好,如果你对web中的session概念不太清楚的话,一定要去看看,可能需要FQ才能阅读:http://fred-zone.blogspot.com/2014/01/web-session.h ...

  5. Monkeyrunner 常用按键

    MonkeyRunner常用的按键介绍 Home键:KEYCOD_HOME   Back键:KEYCODE_BACK  send键:KEYCODE_CALL  end键:KEYCODE_ENDCALL ...

  6. asp.net mvc 多级文件夹

    ASP.NET MVC - 定制属于你自己的ViewEngine 标签: asp.netmvcstring引擎razorapplication 2012-07-26 14:17 5365人阅读 评论( ...

  7. .NET 程序集与命名空间

    程序集 程序集(assembly)是一个或多个托管模块,以及一些资源文件的逻辑组合. 组成部分 Windows文件首部 CLR文件首部 程序集清单 类型元数据 MSIL(CIL)代码 嵌入资源集 作用 ...

  8. How to Install The Alpha Control Packages.

    Uninstalling previous version of the package If you have a previous version of the package already i ...

  9. 理解JavaScript中的作用域和上下文

    JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScrip ...

  10. android 扫描

    http://blog.csdn.net/abidepan/article/details/11902041