Java集合学习--集合总结
一、ArrayList与Vector
ArrayList与Vector很多地方大同小异,Vector现在已经基本不再使用。具体的管理如下:
1.ArrayList与Vector都实现了List接口,底层都是基于动态数组实现。
2.ArrayList与Vector底层数组初始大小均为10。
3.ArrayList非线程安全,Vector中方法都是synchronized方法,进行了同步处理。
4.ArrayList扩容机制是扩大为原来的1.5倍,Vector扩容,默认扩大为原来的2倍。
二、HashMap与HashTable
1.均实现Map接口,底层主要数据接口是散列表,hash冲突的时候处理方式都是链表,但是HashMap在1.8后进行大量的优化,引入红黑树。
2.HashMap的初始容量大小为16,加载因子为0.75,HashTable默认初始容量为11,默认加载因子为0.75
Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
3.Hashtable中key和value都不允许为null,而HashMap中key和value都允许为null
4.HashMap的扩容机制是扩大为原来的2倍,HashTable扩大为原来的2倍+1;
5.确定一个键值对在散列表中的位置,HashTable是 int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;即将hash值转正值后进行length的取模
HashMap是int hash = key.hashCode()) ^ (h >>> 16);int i = (n - 1) & hash
三、ArrayList与LinkedList
1.均实现List接口,都非线程安全。
2.ArrayList实现RandomAccess接口,支持快速查找和二分查找,LinkedList实现Deque接口,可用作队列。
3.底层实现不同,ArrayList主要是借助动态数组实现,LinkedList则是双向链表。
4.ArrayList扩容,扩大为原来的1.5倍,LinkedList则不需要进行扩容,在内存足够的前提下,容量不限。
5.对比与LinkedList,ArrayList的查找效率高,插入删除效率不足。
四、HashMap,LinkedHashMap,TreeMap
1.均实现Map接口,存储键值对。均非线程安全
2.LinkedHashMap继承HashMap,具有HashMap的所有特性,同样允许key和value为null。底层实现主要是散列表,链表,红黑树;TreeMap主要是通过红黑树实现。
3.HashMap是无序的,LinkedHashMap通过一个双向链表维护key-value的插入顺序,TreeMap默认是根据key的字典顺序升序排序。
4.TreeMap的查询、插入、删除效率均没有HashMap高,一般只有要对key排序时才使用TreeMap
5.TreeMap的key不能为null,而HashMap和LinkedHashMap的key可以为null。
五、HashSet、LinkedHashSet和TreeSet
1.Hashset的实现借助HashMap
public HashSet() {
map = new HashMap<>();
}
2.LinkedHashSet的底层实现是LinkedHashMap
3.TreeSet的实现基于TreeMap
public TreeSet() {
this(new TreeMap<E,Object>());
}
set相当于是只存储了key的Map,理解了Map的相关实现类,set的相关实现类水到渠成。
Java集合学习--集合总结的更多相关文章
- Java 集合学习--集合概述
一.集合框架 集合,通常也叫容器,java中有多种方式保存对象,集合是java保存对象(对象的引用)的方式之一,之前学习的数组是保存对象的最有效的方式,但是数组却存在一个缺陷,数组的大小是固定的,但是 ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- Java基础学习--集合
集合 List集合的特点 1.有序的数据集合,存储元素和取出元素的顺序是一致的(存储123,取出123) 2.有索引,包含了一些带索引的方法 3.允许存储重复的元素 List接口中带索引的方法 add ...
- java基础学习——集合
-------|List: 有存储顺序, 可重复-----------|ArrayList: 数组实现, 查找快, 增删慢,由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢. ...
- 有关JAVA基础学习中的集合讨论
很高兴能在这里认识大家,我也是刚刚接触后端开发的学习者,相信很多朋友在学习中都会遇到很多头疼的问题,希望我们都能够把问题分享出来,把自己的学习思路整理出来,我们一起探讨一起成长. 今天我 ...
- 转:深入Java集合学习系列:HashSet的实现原理
0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特 ...
- Java基础学习笔记十五 集合、迭代器、泛型
Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都 ...
- 2019/3/4 java集合学习(二)
java集合学习(二) 在学完ArrayList 和 LinkedList之后,基本已经掌握了最基本的java常用数据结构,但是为了提高程序的效率,还有很多种特点各异的数据结构等着我们去运用,类如可以 ...
- 2019/3/2周末 java集合学习(一)
Java集合学习(一) ArraysList ArraysList集合就像C++中的vector容器,它可以不考虑其容器的长度,就像一个大染缸一 样,无穷无尽的丢进去也没问题.Java的数据结构和C有 ...
随机推荐
- 【luogu P3366 最小生成树】 题解 Prim
include include include include using namespace std; const int maxn = 505000; int n, m, dis[maxn], v ...
- ElasticSearch搜索服务技术
ElasticSearch 基于的lucene开发的搜索服务技术;天生支持分布式; Es的结构 gatway:存储层,所有的数据可以存储在本地(多个es节点形成分布式存储),hdfs输出位置,共享文件 ...
- GPUImage源码解读之GPUImageContext
GPUImageContext类,提供OpenGL ES基本上下文,GPUImage相关处理线程,GLProgram缓存.帧缓存.由于是上下文对象,因此该模块提供的更多是存取.设置相关的方法. 属性列 ...
- E. K Balanced Teams
类比背包问题,为每个学生附加一个权重$pos[i]$,意思是选择该学生后,之后可以选择$p[i]~p[i]+5$的学生. 转换公式: $$d[i][j]=max(d[i+1][q],d[i+pos][ ...
- 【2015 ICPC亚洲区域赛长春站 G】Dancing Stars on Me(几何+暴力)
Problem Description The sky was brushed clean by the wind and the stars were cold in a black sky. Wh ...
- 剑指Offer_编程题之替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.
- 写shell脚本需要注意哪些地方----零基础必看
shell脚本是完全靠自学的,每一步需要注意的问题都是我自己亲自实践出来的,对于大神可能看来是小儿科,但是对于新手,是必须注意的 一.首先执行 echo $SHELL查看本机的解释器, 二.开始写脚本 ...
- Array方法学习小结
原生js forEach()和map()遍历 A:相同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...
- php bug 调试助手 debug_print_backtrace()
debug_print_backtrace() 是一个很低调的函数,很少有人注意过它. 不过当我对着一个对象调用另一个对象再调用其它的对象和文件中的一个函数出错时,它也许正在一边笑呢 如果我们想知道某 ...
- netfilter 学习摘要
netfilter 子系入口在L3,完成后把数据包发往L4 netfilter 主要功能: 数据包选择(iptables) 数据包过滤 网络地址转换(NAT) 数据包操纵(在路由选择之前或之后修改数据 ...