整理之Java容器
主要参考:JAVA常见容器
Set,List,Map,Vector,ArrayList的区别
Java所有容器见下图:

数组
int[] t = new int[10]; //声明并创建长度为10的数组,用默认值占位,String默认值为null
int[] t = new int[] {1, 2, 3}; //声明并创建数据同时初始化初值
int[] t = {1, 2, 3}; //同楼上
//数组的长度都是不可变的
List
list是有序的集合,内容也可以重复
- ArrayList是采用数组实现的list,所以利于随机查找和修改,不利于增加和删除。
- LinkedList是采用循环双链表实现的list,所以利于在插入和删除,不利于随机查找和修改。而且由于需要存储节点,LinkedList占用空间较大
- Vector与ArrayList的唯一区别是Vector是线程安全、同步、效率低,ArrayLisy相反
- Stack类继承于Vector,实现一个栈,提供push、pop、peek(不出栈的pop)、search、empty等方法
list的子类都继承了iterator方法以供遍历:
ArrayList<Integer> al = new ArrayList<>();
Iterator<Integer> it = al.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
此外List还提供ListIterator方法,允许增加、删除、修改和向前向后移动,使用方法同Iterator。
ArratList和Vector的默认容量为10, 最大容量是Integer.MAX_VALUE - 8。】
ArrayList采用1.5倍扩容,Vector采用2倍扩容如果扩容后仍不够用,则直接扩容到所需的大小。
Map
1.HashMap与HashTable
HashMap与HashTable类似于ArrayList与Vector,实现原理相同,但是前者非线程安全非同步,效率高;后者相反。
Map的key是不可重复的
Map的常用Api:
HashMap<Integer, String> hm = new HashMap();
hm.put(1, "英语");
hm.put(2, "语文");
hm.put(3, "数学");
hm.replace(1, "化学"); //将key=1的value替换
Boolean i = hm.replace(1, "英语", "化学"); //如果key=1的value=英语则替换为化学,否则不替换
hm.remove(1); //这一对函数的原理同replace
Boolean i = hm.remove(1, "英");
Set<Entry<K, V>> entrySet = hm.entrySet(); //Map的实际元素就是Entry
hm.getOrDefault(Object key, String defValue);//取出key对应的value,如果没有则返回默认值defValue
hm.putIfAbsent(Object key, String defValue);//插入键值对.如果key不存在则
HashMap内部采用Hash算法进行排序,HashMap默认容量为16,容量为2^n,加载因子为0.75(已有元素超过总容量的75%是扩容),如:
HashMap<Integer, String> hm = new HashMap();
hm.put(15, "数学"); //15
hm.put(19, "英语"); //4
hm.put(72, "语文"); //8
for (Map.Entry<Integer, String> e : hm.entrySet()) {
System.out.println(e.getKey() + " " + e.getValue());
}
//上面输出为:
//19 英语
//72 语文
//15 数学
HashTable默认容量为11,加载因子为0.75,扩容方式为:2*原容量+1
2.LinkedHashMap
LinkedHashMap继承了HashMap。但是与HashMap不同的是:LinkedHashMap插入元素和取出元素的顺序是一致的,因为其内部维持了一个双向链表,用于记录迭代顺序。
LinkedHashMap扩容机制同HashMap
3.TreeMap
TreeMap同样有序,但是TreeMap是按照字典顺序升序排列key(数字0-9,字母a-z)。如:
TreeMap<String, String> tm = new TreeMap<>();
tm.put("aircrew", "英语");
tm.put("aircraft", "数学");
tm.put("rabbit", "语文");
tm.put("airdrome", "语文");
for (Map.Entry<String, String> e : tm.entrySet()) {
System.out.println(e.getKey() + " " + e.getValue());
}
//以上输出为:
//aircraft 数学
//aircrew 英语
//airdrome 语文
//rabbit 语文
TreeMap由红黑树算法实现,无容量限制
Set
Set内部元素是无序、确定、单一的。Set比较元素是否相同使用equals而不是==。
Set的主要子类有HashSet、LinkedHashSet和TreeSet,其关系与Map的三个子类相同。
HashSet用HashMap来实现,其内部实例化一个HashMap用于存储数据,但只用到了key,value用一个Object()代替。
所以在排序和扩容方面,HashSet和HashMap完全相同。
Queue
除了以上三大类数据结构外,Java还提供了队列的接口Queue(LinkedList实现了其子接口Deque,可以当做Queue使用)。
整理之Java容器的更多相关文章
- Java容器相关知识点整理
结合一些文章阅读源码后整理的Java容器常见知识点.对于一些代码细节,本文不展开来讲,有兴趣可以自行阅读参考文献. 1. 思维导图 各个容器的知识点比较分散,没有在思维导图上体现,因此看上去右半部分很 ...
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- 【Java心得总结五】Java容器上——容器初探
在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...
- 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为<基于Java容 ...
- 【转载】国外程序员整理的Java资源大全
以下转载自: 推荐!国外程序员整理的Java资源大全中文版 https://github.com/akullpp/awesome-java英文版 Java 几乎是许多程序员们的入门语言,并且也是 ...
- java容器基础
总结一下学过的java容器知识. 一.java容器框架 由于之前学习的java容器类比较混乱,先简单的整理一下java集合框架. 首先,像这种图,网上到处都是,因为这个也算比较准确吧,我也懒得自己画了 ...
- Java容器框架总结(一)
本篇根据<Java编程思想> 第11章 持有对象 整理,总结Java容器框架中常用集合类及接口的特点及使用场景. (一)总结 1)数组将数字与对象联系起来:可以保存基本类型的数据:一旦生成 ...
- Java容器--2021面试题系列教程(附答案解析)--大白话解读--JavaPub版本
Java容器--2021面试题系列教程(附答案解析)--大白话解读--JavaPub版本 前言 序言 再高大上的框架,也需要扎实的基础才能玩转,高频面试问题更是基础中的高频实战要点. 适合阅读人群 J ...
- 【Java心得总结六】Java容器中——Collection
在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...
随机推荐
- SSM整合文件框架
1.项目架构如图 web3.0项目,tomcat9.0,自动生成web.xml文件 按照mybatis配置,先自动生成dao层,更改相应信息 我mybatis如何配置: https://www.c ...
- jvm源码解读--18 Java的start()方法解读 以及 wait 和notify流程图
drawwed by 张艳涛 and get info from openjdk8 还有一个图
- mysql 版本在springboot 中定义位置
- RTB1靶机
一.信息收集 信息收集 http://192.168.111.132/Hackademic_RTB1/?cat=1 http://192.168.111.132/Hackademic_RTB1/?ca ...
- Pytorch指定GPU的方法总结
Pytorch指定GPU的方法 改变系统变量 改变系统环境变量仅使目标显卡,编辑 .bashrc文件,添加系统变量 export CUDA_VISIBLE_DEVICES=0 #这里是要使用的GPU编 ...
- 面试官:展开说说,Spring中Bean对象是如何通过注解注入的?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 章节目录(手写Spring,让你了解更多) [x] 第 01 章:开篇介绍,我要带你撸 Spr ...
- Spring Cloud分区发布实践(3) 网关和负载均衡
注意: 因为涉及到配置测试切换, 中间环节需按此文章操作体验, 代码仓库里面的只有最后一步的代码 准备好了微服务, 那我们就来看看网关+负载均衡如何一起工作 新建一个模块hello-gateway, ...
- SVG和Canvas的区别?
什么是SVG? SVG(可缩放矢量图形)编辑可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 什么是 Canvas ...
- Java容器学习——List
Java容器学习--List 基础知识 数组: 优点:随机存取,可以快速访问元素 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: 优点: ...
- SpringMVC学习01(什么是SpringMVC)
1.什么是SpringMVC 1.1 回顾MVC 1.1.1 什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑.数据 ...