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

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

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

1.数组的基本用法

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

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

  

  任何数据类型都有与之对应的数组,比如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 < arr.length; 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 < arr.length; 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 < arr.length-1; 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 = 0; i < 10; i++) {
array.add(i);
}
//注意,此时由于数组满了我们还添加数据,就会报异常
array.add(222);
array.show();
array.delete(5);
System.out.println("删除数据后数组的实际大小:"+array.size());
array.add(100);
array.update(0, 10);
array.find(9);
array.show(); }
}

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

java数据结构和算法01(数组的简单使用)的更多相关文章

  1. Java数据结构和算法之数组与简单排序

    一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...

  2. Java数据结构和算法的数组

    阵列的功能: 1.固定大小 2.相同的数据类型 3. 4.数据项可反复 Java数据类型:基本类型(int和double)和对象类型.在很多编程语言中.数组也是基本类型.但在Java中把它们当作对象来 ...

  3. 《Java数据结构与算法》笔记-CH3简单排序

    class ArrayBub { private long[] arr; private int nElement; public ArrayBub(int size) { arr = new lon ...

  4. Java数据结构和算法总结-数组、二分查找

    前言:在平时开发中数组几乎是最基本也是最常用的数据类型,相比链表.二叉树等又简单很多,所以在学习数据和算法时用数组来作为一个起点再合适不过了.本篇博文的所有代码已上传 github ,对应工程的 ar ...

  5. 《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入

    好几天又没写,因为这几天很闲,平时忙的时候自己再累都不会睡着,但是呢这没事了,照理说应该是不瞌睡了,结果还睡着了. 所以说,人很贱.也验证了一句话,没有目标的人其实最无聊.人一定要有自己的工作,这工作 ...

  6. Java数据结构和算法 - 简单排序

    Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...

  7. Java数据结构和算法 - 数组

    Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new ...

  8. Java数据结构和算法 - 二叉树

    前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...

  9. Java数据结构和算法 - 哈希表

    Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...

随机推荐

  1. 使用nginx缓存服务器上的静态文件

    一.nginx缓存的优点 如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力. 因为静态文件(比如css,js, 图片)中,很多都是不经常更新的.nginx使用proxy_cach ...

  2. JavaScript高级程序设计(二)

    一.函数 1.1 JS中函数无重载,同一作用域下定义两个函数,而不会引发错误,但真正调用的是后面定义的函数.例如: function doAdd(iNum){ alert(iNum+100); } f ...

  3. 3D Lut 电影级调色算法 附完整C代码

    在前面的文章,我提到过VSCO Cam 的胶片滤镜算法实现是3d lut. 那么3d lut  到底是个什么东西呢? 或者说它是用来做什么的? 长话短说,3d lut(全称 : 3D Lookup t ...

  4. [转]关于python中带下划线的变量和函数的意义

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  5. selenium+python自动化测试

    F12: 右键   选择复制  path 在selenium+python自动化测试(一)–环境搭建中,运行了一个测试脚本,脚本内容如下: from selenium import webdriver ...

  6. synchronized与Lock的区别

    两者的区别分类对比: 类别 synchronized Lock 存在层次 Java的关键字,在jvm层面上 是一个类 锁的释放 1.以获取锁的线程执行完同步代码,释放锁 2.线程执行发生异常,jvm会 ...

  7. HTML学习之制作导航网页

    前言 今天用HTML写了一个网址导航,源代码如下: <html> <head> <title>网址导航</title> </head> &l ...

  8. Java JWT: JSON Web Token

    Java JWT: JSON Web Token for Java and Android JJWT aims to be the easiest to use and understand libr ...

  9. Step by step guide to set up master and slave machines on Windows

    Note: There is no need to install Jenkins on the slave machine. On your master machine go to Manage ...

  10. Java 字符流文件读写

    上篇文章,我们介绍了 Java 的文件字节流框架中的相关内容,而我们本篇文章将着重于文件字符流的相关内容. 首先需要明确一点的是,字节流处理文件的时候是基于字节的,而字符流处理文件则是基于一个个字符为 ...