JAVA基础之——数据结构
JAVA数据结构有8种,如下所示,本文从使用场景,优缺点方面讲解。
1 数组Array
ArrayList 使用场景:有序的存储同一类型数据的集合,固定大小
优点:通过索引查找方便
缺点:插入或删除一个值时,改变值之后的索引都需要更新,故操作复杂;其次,由于大小固定,造成了设置过大内存浪费,设置过小又不能满足存储要求。
2 栈stack
使用场景:限定仅在表尾进行插入或是删除的线性表,先进后出
3 队列queue
Queue包路径java.util.Queue,表头删除,表尾添加,先进先出。是一个接口,父类Collection,常用方法有
add offer remove poll element peek
4 链表list
使用场景:存储可变空间的非连续非顺序的一类数据。
缺点:访问时或是插入删除链表中间值,需要遍历链表,耗时多。
ArrayList包路径java.util.ArrayList,默认初始容量10,采用数组形式保存数据。
缺点:每插入一条数据,需要更新插入点以及之后的所有数据的索引号,以及计算大小。
LinkedList将对象保存在独立的内存空间中,同时每个空间还保存下一个链接的索引。
使用场景:批量随机插入或删除数据。
缺点:由于查找需要从第一个索引开始,故查找效率低;由于每个节点存储了两个引用,故内存占用大
5 树tree
6 堆heap
7 图graph
8 散列表hash
使用场景:根据关键码值进行访问的数据结构。
HashMap包路径java.util.HashMap,线程非安全,存储时没使用锁。默认初始容量16,加载因子0.75,每一个存入的对象都有一个特定的哈希值。碰撞问题:^_^不同的对象计算出来的index相同,单向链表解决碰撞问题,加入一个next记录一个节点。
扩容:当存储数据超过存储比率时,数组变长2倍成一个新数组,原数组中的值迁移到新数组中。数组中元素的位置重新存放一次。红黑树
主要参数,数据结构,计算规则,存取过程
Hashtable
HashSet
ConcurrentHashMap包路径java.util.concurrent。线程安全,引入了分段锁,为并发hashmap,默认容量16,加载因子0.75,默认并发数16,即最多同时有16条线程操作这个map。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!
JAVA基础之——数据结构的更多相关文章
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- Java基础知识【上】(转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- 万能的林萧说:一篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础”。
来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日,LZ在群里发话,"招人啦." 然某群友曰,"群主,俺想去." LZ回之,"你 ...
- Java基础应用
Java集合类解析 List.Map.Set三个接口,存取元素时,各有什么特点? List 以特定次序来持有元素,可有重复元素.Set 无法拥有重复元素,内部排序.Map 保存key-value值,v ...
- Java基础常见英语词汇
Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的 ['prəʊɡræmɪŋ]编程 OO: object ...
- java基础3.0:Java常用API
本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...
- 黑马程序员----java基础笔记中(毕向东)
<p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...
- Java基础知识点
以下10点为JAVA 基础知识,后面将足以总结和完善以备面试 数据类型 (包装类,字符串,数组) 异常处理 Java IO和NIO 数据结构 (集合和容器 ) 多线程(并发) 网络通信(协议) 面向对 ...
随机推荐
- 【OCP-12c】CUUG 071题库考试原题及答案解析(16)
16.(7-5) choose the best answerThe PRODUCTS table has the following structure:Evaluate the following ...
- JAVA中-面向网络编程---单层交互
面向网络编程---单层交互: 客户端说明: /* * 实现TCP客户端,链接到服务器 * 和服务器实现数据交互 * 实现TCP客户端的类 java.net.Scoket * 构造方法: * Socke ...
- css 实现关闭按钮 X
.close::before { content: "\2716";} 然后就显示出来了 这里有个更直接的例子 <!DOCTYPE html> <html lan ...
- Linux下的压缩及归档
Linux下常用的压缩格式有: gz,bz2,xz,zip,Z //只能压缩文件不能压缩目录,如果传递一个目录,他会把目录中的文件逐个压缩 ..压缩算法:算法不同,压缩比也不同 gz:gzip,压缩后 ...
- 动态代理方案性能对比 (CGLIB,ASSIT,JDK)
动态代理工具比较成熟的产品有: JDK自带的,ASM,CGLIB(基于ASM包装),JAVAASSIST, 使用的版本分别为: JDK-1.6.0_18-b07, ASM-3.3, CGLIB-2.2 ...
- [转] 检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 — system level)
Google浏览器Chrome更新到时候提示错误:检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 -- system level),很有可能是Chrome更新服务被禁用了,我 ...
- Python 魔法方法查询表 -- 总结篇
据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...
- SpringBoot整合JdbcTemplate连接Mysql
import java.io.IOException; import javax.sql.DataSource; import org.apache.ignite.IgniteSystemProper ...
- Mac OS 10.12使用U盘重装(转)
OS X Capitan和macOS Sierra的安装方式和下载系统的方法都是一致的,下面是OS X Capitan的安装方法: 一.准备工作: 准备一个8GB或者8G以上容量的U盘 确保里面的数据 ...
- java翻译到mono C#实现系列(4) 利用CountDownTimer类实现倒计时功能 mono版
群里的朋友问利用CountDownTimer类实现倒计时功能怎么实现,我就百度了,参考http://blog.csdn.net/qq344429461/article/details/7521361写 ...