热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java数组的数据结构_java数据结构和算法中数组的简单入门

一直都对这一块没有什么想法,加上不怎么理解,只是懂个大概;最近突然感觉对数据结构和算法这块有点儿兴趣,决定还是尽量详细的看看

一直都对这一块没有什么想法,加上不怎么理解,只是懂个大概;最近突然感觉对数据结构和算法这块有点儿兴趣,决定还是尽量详细的看看这些结构和算法;

话说什么事数据结构和算法呢?现在我也说不上来,等我学的差不多了再来总结吧!

我随意借了一张图,所谓的数据结构就是下面这些,我们一个一个的慢慢看(玛德,好多。。。)

622202464c079949342c38561539f1bd.png

1.数组的基本用法

对于数组应该很熟悉了,最开始学完java八种基本类型之后下一个就是学的数组,数组最大的特点就是除了Object数组之外,其他的数组只能存放同一种数据类型,而且我们一开始指定数组就要指定确定的长度,一旦插入的数据超过这个长度,就会报错,其实就是因为数组的缺点太大,于是就根据数组的基础设计出来了集合,集合后面说。。

两种用法,以Object数组为例,这个数组可以随意放什么东西,然后用Arrays.toString(xxx)可以打印数组中的所有元素;

fdc53feb40d22b8994e09fd818b4774f.png

任何数据类型都有与之对应的数组,比如int[],String[],boolean[]等等

2.简单实现对数组的增删改查

·用数组的比较麻烦,还要一个一个慢慢赋值,对我们操作数据也不是很方便,那我们就随意实现一下我们自己的数组最简单的增删改查吧!

package com.wyq.thread;

public class MyArray {

private int[] arr;

//数组中当前存有数据的个数,也叫做数组的有效长度

private int eles;

//数组中可容纳最大的数量

private int length;

//注意这两个构造器,在无参构造中调用有参构造并设置默认的数组长度

public MyArray() {

this(10);

}

public MyArray(int length){

eles = 0;

this.length = length;

arr = new int[length];

}

//获取当前数组存的实际数据的数量

public int size(){

return eles;

}

//展示当前数组中的数据

public void show(){

System.out.print("数组中所有的数分别为:");

for (int i = 0; i

System.out.print(arr[i]+" ");

}

System.out.println();

}

//向数组中添加数据

public boolean add(int num){

//假如当前数组已经满了还往里面添加数据,那就抛出异常并返回false,后续操作还是会继续

//这里就没怎么考虑给这个数组扩容

if (length==eles) {

try {

throw new Exception("不好意思,数组已经满了,你还是别存了!");

} catch (Exception e) {

e.printStackTrace();

}

return false;

}else{

arr[eles] = num;

eles++;

return true;

}

}

//在数组中查有没有一个xxx数据,有就返回其索引值,没有的话就返回null,其实也可以捕捉异常,可以自己试试

public Integer find(int value){

if (arr!=null) {

for (int i = 0; i

if (arr[i]==value) {

return i;

}

}

}

return null;

}

//删除数组中的xx数据,这里会进行很多的判断,可以说这个方法是数组中最麻烦的方法了

//1.先调用查询方法看数组中有没有我们要删除的数据,没有直接返回-1,有的话就进入第二步

//2.如果这个要删除的数据在数组最后,那就直接将数组有效长度减一即可,如果不在最后,进入第三步

//3.一个数组要删除中间的个位置,不可能直接将这个数据复制为0或者null,我们只需要把这个位置的后面所有数据都向前

// 移动一个位置即可,这时数组的最后一个位置就空出来了,我们再把数组的有效长度减一就行了

public int delete(int value){

Integer find = find(value);

if (find!=null) {

if (find==eles-1) {

eles--;

}else{

for (int i = find; i

if (arr[i]==value) {

arr[i]=arr[i+1];

}

}

eles--;

}

}

return -1;

}

//更新数据,先调用查询方法找到这个数据所在位置,然后直接赋值即可

public boolean update(int index,int value){

Integer find = find(index);

if (find!=null) {

arr[index]=value;

return true;

}

return false;

}

public static void main(String[] args) {

//由于没有指定数组长度,就会用默认的10

MyArray array = new MyArray();

for (int i &#61; 0; i <10; i&#43;&#43;) {

array.add(i);

}

//注意&#xff0c;此时由于数组满了我们还添加数据&#xff0c;就会报异常

array.add(222);

array.show();

array.delete(5);

System.out.println("删除数据后数组的实际大小&#xff1a;"&#43;array.size());

array.add(100);

array.update(0, 10);

array.find(9);

array.show();

}

}

7529a4b1b245b77ffcc4a8c186836049.png

不知道大家有没有发现&#xff0c;我们实现的这个最简单的数组有没有跟集合有点类似啊&#xff0c;就是那个ArrayList&#xff0c;去看看源码你会发现我们这个就是最丑陋版的ArrayList&#xff0c;哈哈哈&#xff01;只是实现了最简单的功能&#xff01;



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有