java常用集合框架底层实现简介与注意点
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常用集合框架底层实现简介与注意点的更多相关文章
- java常用集合框架关系
一.综合总图 1.所有集合类都位于java.util包下. 2.Java的集合类主要由两个接口派生而出:Collection和Map, 3.Collection和Map是Java集合框架的根接口,这两 ...
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- Java基础——集合框架
Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...
- 浅谈Java的集合框架
浅谈Java的集合框架 一. 初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...
- java的集合框架set 和map的深入理解
Java的集合框架之Map的用法详解 Map有两种比较常用的实现:HashMap 和 TreeMap. HashMap: HashMap 也是无序的,也是按照哈希编码来排序的,允许使用null 值和n ...
- Java常用日志框架介绍
Java常用日志框架介绍 java日志概述 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.java领域存在多种日志框架,目前常用的日志框架包括L ...
- Java常用日志框架介绍(转)
Java常用日志框架介绍 java日志概述 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.java领域存在多种日志框架,目前常用的日志框架包括L ...
- Java 高级-集合框架
参考资料 参考 HashMap 类似 C++ 中的 STL 标准模板库,Java 也在 java.util 包中封装了一套常用数据结构及其算法,称为集合框架.所有的集合框架都包含如下内容: 接口:代表 ...
- Java常用集合笔记
最近事情比较少,闲暇之余温习巩固一下Java的一些基础知识,并做一些笔记, Java常用集合, 主要参考的这篇文章:Java常用集合 ArrayList/Vertor 1. ArrayList 的主要 ...
随机推荐
- opencv的图片的灰度处理‘
#include "stdafx.h" //实现将彩色图片转换成灰度图 int _tmain(int argc, _TCHAR* argv[]){ IplImage *image; ...
- 开大你的音响,感受HTML5 Audio API带来的视听盛宴
话说HTML5的炫酷真的是让我爱不释手,即使在这个提到IE就伤心不完的年代.但话又说回来,追求卓越Web创造更美世界这样高的追求什么时候又与IE沾过边儿呢?所以当你在看本文并且我们开始讨论HTML5等 ...
- Unity3D NGUI刮刮卡效果
线上效果 确保你的纹理的read/write 是勾选的,纹理格式是 RGBA32的 //代码 using UnityEngine; [RequireComponent(typeof(UITexture ...
- 转一篇介绍Web session概念的文章
说的非常好,如果你对web中的session概念不太清楚的话,一定要去看看,可能需要FQ才能阅读:http://fred-zone.blogspot.com/2014/01/web-session.h ...
- Monkeyrunner 常用按键
MonkeyRunner常用的按键介绍 Home键:KEYCOD_HOME Back键:KEYCODE_BACK send键:KEYCODE_CALL end键:KEYCODE_ENDCALL ...
- asp.net mvc 多级文件夹
ASP.NET MVC - 定制属于你自己的ViewEngine 标签: asp.netmvcstring引擎razorapplication 2012-07-26 14:17 5365人阅读 评论( ...
- .NET 程序集与命名空间
程序集 程序集(assembly)是一个或多个托管模块,以及一些资源文件的逻辑组合. 组成部分 Windows文件首部 CLR文件首部 程序集清单 类型元数据 MSIL(CIL)代码 嵌入资源集 作用 ...
- How to Install The Alpha Control Packages.
Uninstalling previous version of the package If you have a previous version of the package already i ...
- 理解JavaScript中的作用域和上下文
JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScrip ...
- android 扫描
http://blog.csdn.net/abidepan/article/details/11902041