Java数据结构的知识体系主要包括线性表,树,图,数组,集合,矩阵,排序,查询,哈希表,并将java的设计思想,方法及一些常用的算法,设计模式贯穿其中。
其中线性表,链表和哈希表示最为常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类,来实现基本的数据结构。这些类均在Java.util
包中。
Collection:
(1)List:
1.linkedList
2.ArrayList
3.Vector
 3.1 Stack
(2)Set
Map:
1.Hashtable
2.HashMap
3.WeakHashMap

1.Collection接口
接口Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些COllection允许有相同的元素,而另一些则不行。
一些能排序而另一些不行,Java SDK 不提供直接继承自COllection的类,JavaSDK提供的类都是继承自COllection的“子接口"如List和Set。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的
Collection与传入的Collection有相同的元素。后一个构造函数运行用户复制一个Collection。
如何遍历Collection中的每一个元素?不论Collection的时间类型如何,它都支持一个iterator()的方法,该方法返回一个迭代器,使用该迭代器即可逐一访问Collection中的每一个元素。
2.List接口
接口List是有序的Collection,使用此接口能够精确地控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似与Java的数组。
与下面要提到的Set不同,List允许有相同的元素。出来具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口。与标准的Iterator接口相比,
ListIterator多了一些Add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。
实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。
3.ArrayList类(非同步的)
arrayList类实现了可变大小的数组。它允许所有元素,包括null.
ArrayList没有同步,Size,isEmpty,get,set方法的运行时间为常数。但是add方法的开销为分摊的常数,添加n个元素需要O(n)的时间。其他方法的运行时间为线性。每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。
这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义,当需要插入大量元素时,在插入请可以调用ensureCapacity方法来增加ArrayList的容量可以提高插入效率。
4.Vector类
Vector类非常类似于ArrayList类,但Vector是同步的,有Vector创建的Iterator,虽然与Arraylist创建的Iterator是同一接口,但是,因为
Vector是同步的,当一个Iterator被创建而且正在被使用时,另一个先从改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法将抛出ConcurrentModificationException异常,因此必须捕获异常。
5.Stack类
Stack类继承自Vector,实现了一个后进先出的堆栈。Stack类提供5个额外的方法,使得Vector得以被当作堆栈使用。有哦基本的Push和pop方法,还有peek方法得到栈顶的元素,
empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

6.Set接口
Set接口是一种不包含重复元素呢的Collection,也就是说,人任意的两个元素e1和e2都有e1.equals(e2)=false关系,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能保护重复的元素。
在此需要注意,必须小心的操作可变对象(Mutable Object).如果一个Set中的可变元素改变了自身状态导致(Object.equals(Object)=true,将导致一些问题。
7.Map接口
Map接口没有继承与接口Collection,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。
Map接口提供3中集合的视图,Map的内容可被当作一组key集合,一组value集合,或者一组key-value映射。
8.hashtable类
Hashtable类继承与Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。添加数据使用put(key,value),取出数据使用get(key),
这两个基本操作的时间开学为常数。
Hashtable通过initial capacity和load factor两个参数来调整性能。通常默认的load factor 0.75较好的实现了时间和空间的均衡。
增大load factor可以节省空间,但相应的,查找时间将增大,这会影响get和Put这样的操作。
9.HashMap类
HashMap类与Hashtable类相似,不同之处在于HashMap是非同步的,并且允许null,即Null value和null key.但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销与
HashMap的容量成比例。因此如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设的过高,或者load factor设的过低。
10.WearkHashMap类
WearkHashMap是一种改进的HashMap,它对key实行"弱引用",如果一个key不再被外部所引用,那么该key可以被GC(垃圾回收器)回收。

注意:
如果涉及堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果选用快速随机访问元素,应该使用ArrayList。如果程序在单线程环境中,
或者访问仅仅在一个线程中进行,考虑非同步的类,取消了较高,如果多个线程肯同时操作一个类,应该使用同步的类。
在此需要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。尽量返回接口而非实际的类型。如返回List而非ArrayList,这样如果以后需要将ArrayList换成linkedList时,客户端代码不用改变。
这就是针对抽象编程。

Java数据结构的知识体系相关推荐

  1. Java架构师知识体系汇总

    Java架构师知识体系汇总 源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模 ...

  2. 1. JAVA全栈知识体系--- Java基础

    1. JAVA全栈知识体系- Java基础 文章目录 1. JAVA全栈知识体系--- Java基础 1.1 语法基础 面向对象特性? a = a + b 与 a += b 的区别 3*0.1 == ...

  3. Java并发核心知识体系精讲---死锁的前世今生

    声明:本文是自己自学慕课网悟空老师的<Java并发核心知识体系精讲>的死锁部分后整理而成课程笔记. 课程链接如下:https://coding.imooc.com/class/362.ht ...

  4. Java SE 基础知识体系梳理

    ## Java SE 基础知识体系梳理 ----------day01------------- (1)计算机的体系结构 (2)Java语言的概述 (3)开发环境的搭建和使用 1.计算机的体系结构(常 ...

  5. java并发核心知识体系精讲_JAVA核心知识汇总

    双非同学如何逆袭大厂? 在互联网行业,入行的第一份工作很大程度上决定了以后职业发展的高度.有些双非的同学认为自己校招进不了大厂以后还会有社招,这种想法很危险.大厂的社招,大多数都只招大厂的员工.什么意 ...

  6. java并发核心知识体系精讲_JVM核心知识体系

    作者:林振华 来源:编程原理 1.问题 如何理解类文件结构布局? 如何应用类加载器的工作原理进行将应用辗转腾挪? 热部署与热替换有何区别,如何隔离类冲突? JVM如何管理内存,有何内存淘汰机制? JV ...

  7. 线程八大核心+java并发核心知识体系精讲_Java从业者如果不懂这些,面试80%都会挂在这些核心知识上面...

    JVM 无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎.不管是工作还是面试中,JVM都是必考题.如果不懂JVM的话,薪酬会非常吃亏(近70%的面试者挂在JVM上了) 详细介绍了JVM有关于 ...

  8. 40000+字超强总结?阿里P8把Java全栈知识体系详解整理成这份PDF

    40000 +字长文总结,已将此文整理成PDF文档了,需要的见文后下载获取方式. 全栈知识体系总览 Java入门与进阶面向对象与Java基础 Java 基础 - 面向对象 Java 基础 - 知识点 ...

  9. 超全面Java全栈知识体系,定期更新(最近更新:2022.8.2)...

    前言 最新Java全栈知识系统,定期更新..... 本套知识体系涵盖六大块: 一.前端基础 涵盖HTML5.CSS3.JavaScript.jQuery.Layui.Bootstrap等: 二.Jav ...

最新文章

  1. linux在机房设置ip,双线机房双IP linux设置路由
  2. 【Foundation Frame】NSDictionary/NSMutableDictionary
  3. golang byte转string_Golang和Rust语言常见功能/库
  4. 推荐一些能能提高生产力的 Python 库
  5. objective-c(初始化)
  6. node.js 笔记1 模块方面
  7. ZOJ-3704 I am Nexus Master! 模拟
  8. qt中dll缺失以及无法启动程序的正确解决方法
  9. yolov3从头实现(六)损失计算
  10. 静态编译和动态编译的区别【转】
  11. html css回顾总结
  12. 周志华机器学习西瓜书速记第二章绪论模型评估与选择(二)
  13. 具有相关关系的数据处理:线性混合模型与广义线性混合模型
  14. 打开FOXMAIL常见错误提示“Message format error”
  15. Machine Learning with Graphs:Part1
  16. 彩信发送失败原因是什么?如何解决?
  17. 无线通信中存在的远近效应、多普勒效应、多径效应以及其应对策略
  18. C++ 开源库,很完整介绍【转】
  19. PX4开源工程结构简明介绍
  20. TAGE-SC-L预测器 “TAGE-SC-L Branch Predictors”(2016)

热门文章

  1. mysql5.3.4 mac 配置_Mac下安装与配置MySQL
  2. Leecode刷题热题HOT100(3)——无重复字符最长子串
  3. SQL Server和Oracle的差异
  4. 基于OctTree的快速最近颜色搜索
  5. vswatch窗口怎么出来_学会这6个打印小技巧,表格想怎么打就怎么打,让工作效率翻倍...
  6. tensorflow-gpu_tensorflow GPU环境安装踩坑日记
  7. c语言字符串截取_一文搞懂 C 语言 #、##、__VA_ARGS__
  8. mac macaca android,[求助] mac 上安装 macaca 的问题
  9. 《计算机应用基础实训教程》,《计算机应用基础实训教程》修改稿(文).doc
  10. sqlserver html文档,[SQLServer]从SQL中的一个表中导出HTML文件表格