数据结构

数组

(3) 数组

特点:根据下标查找数据,查找数据速度快

数据增删麻烦,需要建一个新的数组,还要将数组下标索引移动改变

(1) 栈 (限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端叫

栈顶,另一端叫栈尾)

特点:先进后出

压栈:存数据

弹栈:取数据

队列

(2) 队列(单端队列、双端队列)

特点:数据一段进,另一端出

先进先出

链表

(4) 链表

特点:一个对象存放数据以及下一个链表的引用()指针,增删数据快,只要将

引用指向

删除数据的下一个对象即可

查找数据慢,需要一个对象一个对象这样的有序查找

二叉树

(5) 红黑树(二叉树)

特点:一个根节点有两个节点的有序树,按照与根节点数据的大小对比,进行存

放数据,比它大放右,比它小放左

查找数据速度快,一经比较可以减少半边数据的查找量,类似于二分查找

集合

Collection

(1) Collectiin (存放单值数据)

分为两个子接口

(2)List和set接口(集合)

List接口和set接口是Collection接口的子接口

两个都是存储单值的集合类(每次存储都只能保存一个对象的数据)

List可以存放重复数据,set不可以存放重复数据

List集合

List集合接口**的实现类

(1) ArrayList(基于数组创建的容器类)

特点:数组结构,增删慢,查找快,每次扩容为原来的1.5倍

格式:

ArrayList 引用变量名 = new ArrayList<>( )

三个构造方法

无参(创建默认长度为10的集合)

有参 (创建指定长度的集合)

传进一个Collection的对象 (List和Set的所有集合)

提供的方法

(2) Vector(基于数组创建的容器类)

特点:数组结构,增删慢,查找快;基本与ArrayList相同,但Vector能指定每次扩容的倍数

(3) LinkdeList(双向链表结构)

特点:增删快,查找慢、可以模仿栈数据结构进行数据存储、也可以模仿单端队列数据结构存储数据、可以模仿双端队列数据结构进行数据存储

Set集合

Set集合接口只能存放不重复的数据(null也只能存放一个),使用方法基本和List相同

它的实现类有

(1)HashSet(散列存储,一种哈希表结构)(依赖HashMap实现的)

存放在HashSet的数据是无序存放的,所以在迭代出来的数据顺序和我们输入的顺序是无关的

★没有获取数据的get()方法,可以toArray转为数组或者使用迭代器Iterator进行获取

(2)TreeSet(二叉树存储数据结构)(依赖TreeMap实现的)

★TreeSet的迭代器有两种

1、 快速失败:因为树集是可以多线程访问的,当迭代器正常遍历集合长度时,外部对树集进行了增删,迭代器读取到错误的数据此时就会抛出异常ConcurrentModificationException

2、 安全失败:迭代器进行迭代时会对树集进行备份,对其备份进行迭代,此时就算数据发生了改变与原树集无关

★TreeSet的数据输出根据其数据在阿斯克码表(Unicode)的顺序输出的

Map

Map:存放两个值,一个key(不可重复),一个value,key和value存在映射关系,通

过key(相当于索引,不是有序的)找到其对应的value,对value进行增删改

★数组和Collection也有key,只不过key是系统自动生成的下标,线性有序数据0、1、2….

HashSet和TreeSet就是使用了Map的key实现了存放不重复数据的特点,它们的value都被定义为了常量

★Map的遍历,使用setKey的方法返回所有的key,在使用get(key)方法的到对应的value

★在用put(key,value)和remove(key,value)进行增删时如果key已经有对应的数据value,则返回上一个数据value;如果没有value,则返回null

HashMap

底层实现哈希表(也叫散列表)

hashCode:哈希码值

★哈希码值的计算自己定义,能让数据均匀分布即可

每个数据在哈希表的存储下标=数据的哈希值/哈希表长度取余

哈希表结构

存储过程

Iterator

Iterator (迭代器,用于取出数据)(相当于数组遍历)

(1)Iterator:可用于迭代(遍历)Collection接口下的所有集合(List和Set)

(2) ListIterator:专门用于List集合的迭代(遍历)

★ListIterator比Iterator多了指针向上移动的方法

★Iterator的指针指向集合ArrayList.add添加的数据的上方,如果你用Iterator.add添加数据,只能在指针指向的地方插入,并且指针并不会发生移动,但集合的索引下标会发生改变

对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常

(3)forEach(增强for循环)

用于数组或者集合(Collection),本质是利用迭代器进行循环迭代

格式:

for(变量类型 变量名(相当于数组的[ i ]):数组名或者集合名){ }

最后

感谢你看到这里,看完有什么的不懂的可以在评论区问我,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

java 遍历阿斯克吗_身为一个合格的java开发,这些java集合的知识你得知道,写的很细...相关推荐

  1. java 遍历阿斯克吗_java学习笔记

    Java复习所得到的知识 1:数组的新的排序方法 import java.util.*; public class pasixu { public static void main(String[] ...

  2. java的主函数在哪_打开一个别人的文件,一堆.java, 怎么知道main函数在哪里?

    展开全部 向下边用java开发的一个计32313133353236313431303231363533e78988e69d8331333236356634数器的程序 它的文件名用计算器.java 用记 ...

  3. java开发岗位认识_身为一个java开发人员对目前java开发的一些小小的认识

    为什么要学java? 第一要工作,第二想要高薪 首先身为java开发工作人员你的思想认知程度要搞,思想认知程度决定你的专业技能水平 JavaSE工程师     B/S 架构   ----    浏览器 ...

  4. java卡布列克运算_求验证卡布列克运算的代码及详解

    网络搜索的(Pascal版.C版.C 版):看了一下,根据卡布列克常数的定义,下面的几种程序实现包括输入数.数的各位取出.排序以求最大和最小.求差最后获取该常数. 卡布列克常数 验证卡布列克运算. 任 ...

  5. java 存储数据到文件中_本机速度文件支持的“纯” Java大数据存储

    java 存储数据到文件中 动机 所有这一切始于意识到我买不起足够大的计算机. 音频处理需要大量的内存. Audacity是一款出色的免费音频处理器,它使用文件支持的存储系统对其进行管理. 这是解决此 ...

  6. java:数字转string 报空指针_超干货详解:kotlin(4) java转kotlin潜规则

    前言 以一个java老鸟的角度,如何去看 kotlin. Java源代码应该如何用Kotlin重构. 如何正确学习kotlin并且应用到实际开发中.本文将会探究. 本文分两大块,重难点和潜规则. 重难 ...

  7. java 转化为utc的时间_我6年时间成长为阿里Java架构师,你呢(附学习路线图)...

    前言 我用了6年的时间成为阿里架构师,一步一步走到了现在,中途也想过转换行业,也去了解过别人领域比较好的技术.也想过要转其他的语言,但是最后还是坚持下来走Java这条路,希望我的经历可以帮助到后来的人 ...

  8. java 在面板中加入标签_创建一个JTabbedPane面板,为每一个标签设置一个名称

    [java]代码库package three; //这段程序主要是创建一个JTabbedPane面板,为每一个标签设置一个名称 import javax.swing.*; import java.aw ...

  9. java zip 替换文件_替换一个Zip文件而不解压缩在Java

    我有一个zip文件,我想用另一个文件替换它里面的一个文件.因此,不需要删除zip条目,只需将zip条目的文件替换为另一个条目即可.替换一个Zip文件而不解压缩在Java 这是我试过的. public ...

最新文章

  1. LINUX-NAT(二)
  2. windows环境下设置Redis自启动
  3. sqoop操作之Oracle导入到HDFS
  4. TP5 急速上手 语法规则
  5. perl中-和=作用
  6. 贪心+优先队列 HDOJ 5360 Hiking
  7. 带注释源码php,php的注释方法
  8. Homebrew 插件自启动
  9. WebServce之拦截器
  10. matplotlib—patches.Circle
  11. 中小学创客教室建设,教育创客空间整体解决方案
  12. SVN 回退到某一个版本
  13. vb调用python函数_vb.net / C# 调用 python
  14. java ts流,Windows 合并多个*.ts文件
  15. 网上出现反绿坝网站,邀请网友签名以抵制绿坝
  16. SPSS中的数据分析—信度效度检验【1】
  17. gatk过滤_GATK使用方法详解(变异检测)
  18. win10笔记本,蓝牙耳机连接上电脑以后,耳机没有声音怎么办?
  19. 机器学习6:——Pandas——6:高级处理3:数据合并
  20. Hash(散列)冲突解决 线性探测再散列和二次探测再散列

热门文章

  1. 通过shell脚本消耗cpu与内存
  2. 你好,23岁的 Petterp
  3. 工控机和通用计算机相比的特点,工控机特点
  4. 课程作业2-大一纯网页课程作业——垃圾分类网站设计
  5. 技术分享 | 无人驾驶汽车的眼睛
  6. vds挖矿linux教程,VDS模式币大揭秘
  7. 基于PHP的学生管理系统设计与实现
  8. Category Archives: 机器学习
  9. c语言中的二目运算符,C语言中的三目运算符是什么
  10. 我,大专毕业2年,从前端转型大数据开发,薪资涨了10K!