主要参考: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容器的更多相关文章

  1. Java容器相关知识点整理

    结合一些文章阅读源码后整理的Java容器常见知识点.对于一些代码细节,本文不展开来讲,有兴趣可以自行阅读参考文献. 1. 思维导图 各个容器的知识点比较分散,没有在思维导图上体现,因此看上去右半部分很 ...

  2. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  3. 【Java心得总结五】Java容器上——容器初探

    在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...

  4. 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践

    对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为<基于Java容 ...

  5. 【转载】国外程序员整理的Java资源大全

    以下转载自: 推荐!国外程序员整理的Java资源大全中文版    https://github.com/akullpp/awesome-java英文版 Java 几乎是许多程序员们的入门语言,并且也是 ...

  6. java容器基础

    总结一下学过的java容器知识. 一.java容器框架 由于之前学习的java容器类比较混乱,先简单的整理一下java集合框架. 首先,像这种图,网上到处都是,因为这个也算比较准确吧,我也懒得自己画了 ...

  7. Java容器框架总结(一)

    本篇根据<Java编程思想> 第11章 持有对象 整理,总结Java容器框架中常用集合类及接口的特点及使用场景. (一)总结 1)数组将数字与对象联系起来:可以保存基本类型的数据:一旦生成 ...

  8. Java容器--2021面试题系列教程(附答案解析)--大白话解读--JavaPub版本

    Java容器--2021面试题系列教程(附答案解析)--大白话解读--JavaPub版本 前言 序言 再高大上的框架,也需要扎实的基础才能玩转,高频面试问题更是基础中的高频实战要点. 适合阅读人群 J ...

  9. 【Java心得总结六】Java容器中——Collection

    在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...

随机推荐

  1. SSM整合文件框架

    1.项目架构如图 web3.0项目,tomcat9.0,自动生成web.xml文件 按照mybatis配置,先自动生成dao层,更改相应信息 我mybatis如何配置:   https://www.c ...

  2. jvm源码解读--18 Java的start()方法解读 以及 wait 和notify流程图

    drawwed by 张艳涛 and get info from openjdk8 还有一个图

  3. mysql 版本在springboot 中定义位置

  4. RTB1靶机

    一.信息收集 信息收集 http://192.168.111.132/Hackademic_RTB1/?cat=1 http://192.168.111.132/Hackademic_RTB1/?ca ...

  5. Pytorch指定GPU的方法总结

    Pytorch指定GPU的方法 改变系统变量 改变系统环境变量仅使目标显卡,编辑 .bashrc文件,添加系统变量 export CUDA_VISIBLE_DEVICES=0 #这里是要使用的GPU编 ...

  6. 面试官:展开说说,Spring中Bean对象是如何通过注解注入的?

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 章节目录(手写Spring,让你了解更多) [x] 第 01 章:开篇介绍,我要带你撸 Spr ...

  7. Spring Cloud分区发布实践(3) 网关和负载均衡

    注意: 因为涉及到配置测试切换, 中间环节需按此文章操作体验, 代码仓库里面的只有最后一步的代码 准备好了微服务, 那我们就来看看网关+负载均衡如何一起工作 新建一个模块hello-gateway, ...

  8. SVG和Canvas的区别?

    什么是SVG? SVG(可缩放矢量图形)编辑可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 什么是 Canvas ...

  9. Java容器学习——List

    Java容器学习--List 基础知识 数组: ​ 优点:随机存取,可以快速访问元素 ​ 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: ​ 优点: ...

  10. SpringMVC学习01(什么是SpringMVC)

    1.什么是SpringMVC 1.1 回顾MVC 1.1.1 什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑.数据 ...