整理之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容器 ...
随机推荐
- odoo视图 “动作” 里添加菜单按钮:案例
####################################################################################odoo中常用方法,在动作里面添 ...
- 轮播图 -- view, swiper
效果图 制作步骤: 一.创建一个page 二.编写demo.wxml写界面元素 <!--miniprogram/pages/demo/demo.wxml--> <view class ...
- canvas的globalCompositeOperation属性
在开发过程中遇到过类似刮刮卡的效果,就是涂抹时变透明,显示出下方的内容,做法思路简单说一下问题和解决方案: 分为2层,最下面一层是内容,比如'一等奖',上面一层用一个canvas遮挡住,画布本来是透明 ...
- ThinkPHP 5
use think\Controller 1.$this->request->param(); 内置request 安全对象, 不再使用 $_GET ,$_POST 2.path ...
- sql注入之堆叠注入及waf绕过注入
#堆叠查询注入 1.堆叠查询概念 stacked injections(堆叠查询注入)从名词的含义就可以看出一应该是一堆(多条)sql语句一起执行.而在真实运用中也是如此,我们知道在mysql中,主要 ...
- Java 线程安全的实现方法
概述 在软件业发展的初期,程序编写都是以算法为核心的,程序员会把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体, 程序代码则用于处理这些数据,这种思维方式直接站在计算机的角度去抽象问题和 ...
- OpenStack虚拟网络与物理网络的衔接(flat方式)
by 无若 这边以CentOS7+Liberty版本为例. 过去一段时间(Juno版本之前版本),OpenStack内的虚拟网络与真正的物理网络衔接主要使用openvswitch,其主要问题是在配置网 ...
- [TensorFlow2.0]-Fashion-MNIST本地数据集及fit_generator()的使用
本人人工智能初学者,现在在学习TensorFlow2.0,对一些学习内容做一下笔记.笔记中,有些内容理解可能较为肤浅.有偏差等,各位在阅读时如有发现问题,请评论或者邮箱(右侧边栏有邮箱地址)提醒. 若 ...
- IDEA Error:java: 无效的源发行版: 11错误
IDEA Error:java: 无效的源发行版: 11错误 今天在网上下载了一个项目到本地运行报错 Error: Java : 无效的源发行版: 11 ,上网查了很多找到问题所在.项目的 JDK(P ...
- spring-data-jdbc的基础使用(一)
前言 很多人知道Mybatis,知道Jpa,但是对spring-data-jdbc可能了解的少之又少.注意我们这里说的是data-jdbc,而不是普通的jdbc.它拥有了类似jpa的一些特性,比如能够 ...