Linkedlist,arrayDeque,HashMap,linkedHashMap
Linkedlist
1.extneds AbstractSequentialList, implements List<E>, Deque<E>, Cloneable, java.io.Serializable ,element,peek
2.双向链表,header链表头,size大小
3.按下标访问元素—get(i)/set(i,e) 遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移起),
get set 优化后的线程时间O(n),add,remove,只需要改变指针
4.相对于arraylist需要更耗内存,创建Entry对象
ArrayDeque
1.基于动态数组实现的,双端,双端指针
HashMap
1.继承abstractMap,实现Map,Serializable,Cloneable,序列化通过,writeObject,readObject 方法实现
2.先线性安全,默认容量和加载因子16,0.75,数组resize为原来的两倍,伴随着rehash操作,支持键值null,key为null,存储在第一个bucket中
3.链表法解决哈希冲突,
4.通过modcount成员变量支持fail-fast规则,迭代器抛出ConcurrentModificationException异常
5.get put, put 根据k的hashcode值确定 数组下标,再根据k.hashcode,k比较,是否相同,相同则返回旧值,否则新增,再判断是否超过阈值,超过容量变为两倍
6.indexFor(hash, table.length)按位与 数组长度&
hashCode是native方法,对每一个不同的java环境来说,同一个key所计算的hashCode是不相同的,所以反序列化后table的index会发生变化,无法还原
HashMap的bullet存在null数据,如果对这部分数据进行序列化则造成不必要的资源浪费。
transient使用小结
- transient关键字只能修饰变量,变量如果是用户自定义类变量,则该类需要实现Serializable接口。
- 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
总结
- 当父类继承Serializable接口时,所有子类都可以被序列化。
- 子类实现了Serializable接口,父类没有,父类中的属性不能被序列化(不报错,数据不会丢失),但是在子类中的属性仍能正确序列化
- 如果序列化的属性是对象,则这个对象也必须实现Serializable接口,否则会报错。
- 在反序列化时,如果对象的属性有修改或删减,则修改的部分属性会丢失,但不会报错。
- 在反序列化时,如果serialVersionUID被序列化,则反序列化时会失败
- static,transient修饰后的变量不能被序列化
与hashTable区别
- HashMap非线程安全的,并可以支持键值为null,而Hashtable非线程安全的,key和value都不能为null
- Hashtable和HashMap默认的容量和resize方式不同。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
- hashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器。
HashMap可以通过下面的语句进行同步:Map m = Collections.synchronizeMap(hashMap);
LinkedHashMap
1.继承HashMap,实现Map接口
2.通过hash表加双向链表实现,依靠着双向链表实现迭代顺序为插入顺序或者访问顺序,倒序;LRU缓存,先线性安全
package collections;
import java.util.Map;
public class LRUCache {
private int capacity;
private Map<Integer, Integer> cache;
public LRUCache(final int capacity) {
this.capacity = capacity;
this.cache = new java.util.LinkedHashMap<Integer, Integer> (capacity, 0.75f, true) {
// 定义put后的移除规则,大于容量就删除eldest
protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
return size() > capacity;
}
};
}
public int get(int key) {
if (cache.containsKey(key)) {
return cache.get(key);
} else
return -;
}
public void set(int key, int value) {
cache.put(key, value);
}
}
Collections.sort()
加强型归并排序
Linkedlist,arrayDeque,HashMap,linkedHashMap的更多相关文章
- Java中HashMap,LinkedHashMap,TreeMap的区别[转]
原文:http://blog.csdn.net/xiyuan1999/article/details/6198394 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类 ...
- ArrayList、LinkedList、HashMap的遍历及遍历过程中增、删元素
ArrayList.LinkedList.HashMap是Java中常用到的几种集合类型,遍历它们是时常遇到的情况.当然还有一些变态的时候,那就是在遍历的过程中动态增加或者删除其中的元素. 下面的例子 ...
- HashMap,LinkedHashMap,TreeMap对比
共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...
- JDK 源码分析(4)—— HashMap/LinkedHashMap/Hashtable
JDK 源码分析(4)-- HashMap/LinkedHashMap/Hashtable HashMap HashMap采用的是哈希算法+链表冲突解决,table的大小永远为2次幂,因为在初始化的时 ...
- JDK源代码学习-ArrayList、LinkedList、HashMap
ArrayList.LinkedList.HashMap是Java开发中非常常见的数据类型.它们的区别也非常明显的,在Java中也非常具有代表性.在Java中,常见的数据结构是:数组.链表,其他数据结 ...
- Java HashMap,LinkedHashMap,TreeMap
Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据 ...
- HashMap,LinkedHashMap和Hashtable类的深入剖析与理解
上一篇文章写了一些关于HashMap以及HashMap的线程安全问题,这篇文章再来说说Map系列中HashMap,LinkedHashMap和Hashtable三者之间的差异以及该注意的地方. Has ...
- java HashMap,LinkedHashMap,TreeMap应用
共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...
- Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法
Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...
随机推荐
- C#(结构体_枚举类型)
结构体一般定义在Main函数上面,位于Class下面,作为一个类:一般情况Struct定义在Main函数前面,Main函数里面的地方都可以使用,参数前面加上public代表公用变量. 用法 1 ...
- adb 工具学习
adb (android debug bridge)简单介绍: 1.adb 是 Android SDK中所带工具.使用adb,可以在PC上操作Android设备或者模拟器 2.主要功能有: 将本地ap ...
- [复变函数]第10堂课 3.2 Cauchy 积分定理
0. 引言 (1) $\dps{\int_{|z-a|=\rho}\frac{1}{z-a}\rd z=2\pi i\neq 0}$: 有奇点 (在 $|z|>0$: 二连通区域内解析), 周线 ...
- Expert C# 5.0中的Linq部分
1.先看看.NET中的Linq 2.扩展方法 3.Lambda表达式和表达式树 4.Linq中的延迟操作 5.Linq中的查询方法 5.1分割操作 5.2连接操作 5.3排序操作 5.4分组和连接 5 ...
- Table View滑动时报错
学习表视图(Table View)的应用时,自己写了个demo,最后表格出来了,可是滑动时报错了,报错如下: 这是我ViewController.m部分的代码: #import "ViewC ...
- ORA-30036
http://blog.sina.com.cn/s/blog_676255e101018d5s.html
- windows平台快速安装 matplotlib
版本:Python2.7.9 Pip 1.5.6 如果没有安装VC2008以上版本,就需要工具Microsoft Visual C++ Compiler for Python 2.7 http://w ...
- [HDU 2602]Bone Collector ( 0-1背包水题 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 水题啊水题 还给我WA了好多次 因为我在j<w[i]的时候状态没有下传.. #includ ...
- dwr NoSuchBeanDefinitionException
使用SpringMVC spring dwr时,dwr使用的bean,要将bean配置到根webapplicationcontext中,即applicationContext.xml中, 不能放到d ...
- BeanDefinitionStoreException: Failed to read candidate component class: URL
如题,遇到这种情况一般都是引用jar包版本不一致或者编译后的class除了问题 解决办法: a.如果是maven项目,把项目全部clean一下,重新mvn install b.如果不是maven项目, ...