发布于2021-05-29 20:54 阅读(957) 评论(0) 点赞(6) 收藏(4)
ArrayList: 底层数组,可重复,有序,可存多个null,查快。快速随机访问标志--实现RandomAccess接口,序列化,克隆,
浅拷贝:基本数据类型值传递;引用类型,只存地址,在改动原始对象时会同时改变克隆对象的值 {addll(),for循环add,构造器,System.arraycopy}
深拷贝:基本数据类型值传递;引用类型,创建新对象,并把内容复制过去。
LinkedList:底层双向链表,可重复,有序,可存多个null,插入,删除。
HashMap:实现Map接口, 1.8之前数组+链表。1.8后数组+链表+红黑树,当链表长度阙值达到8时,将转化为红黑树,(将链表转换成红黑树前会判断,如果当前数组的长度大于 64,那么会选择先进行数组 扩容,而不是转换为红黑树),红黑树降低时间复杂度到logN
key只可以有一个null,value多个null。put时可以put多个key为null的,不报错,以最后一个为准,存value。
扩容:初始16;扩容为原来的2倍;如果给定初始容量,会扩容到2的幂次方大小
使用Key计算hashcode
多线程时,会造成数据丢失。
ConcurrentHashMap: 线程安全,底层实现:1.7之前采用分段segment数组+HashEntry数组+链表实现, 分段锁每一段一个锁,一段下包含一个Segment数组,一个segment包含一个 HashEntry数组。每个HashEntry是一个链表结构的元素。将要对HashEntry数组修改时,必须首先获得对应的Segment的锁。
1.8开始 node数组+链表/红黑树。取消了分段锁,采用CAS算法和synchronized来保证并发安全。
synchronized只锁定当前链表或红黑树的首节点。
HashTable:线程安全(synchronized修饰的方法),效率低,
扩容:初始11,扩容2n+1;如果给定初始容量,会按照初始容量。
不能有 NULLKey NULL VALUE,会报java.lang.NullPointerException。
TreeMap:红黑树,有序。要实现Comparator接口。
Vector:list古老实现类,线程安全, 底层数组
HashSet:实现Set接口,底层是HashMap实现,add()添加元素,使用对象计算hashcode。不可重复。
在添加对象时,先用hashcode比较,如果存在相同用equals()比较。
两个对象可能hashcode相同,但是也不一定相等。
只可以存一个NULL,不可重复。add相同的也会只存一个。
LinkedHashSet:是HashSet的子类,可以按照添加顺序遍历。通过LinkedHashMap实现。
TreeSet:底层也是红黑树,可以按照添加顺序遍历,并可以自然排序和定制排序。有序,唯一。重写new Comparator(){ public int compare(Object o1,Object o2){ return o1.compareTo(o2); }} 进行排序。
作者:以天使的名义
链接:http://www.javaheidong.com/blog/article/207228/f116cf0321d823b7d2df/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!