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

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

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

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. C++的find函数使用小技巧

    一个小问题:原始字符串如CRYPT,FUNCTION,我要确定里面是否存在CRYPT,于是调用C++的find()函数,结果判断是不存在,怎么回事? 我的判断代码if(strUseFlagsTmp.F ...

  2. 物流的纯css实现方法

    首先我们来看看UI给出的设计图. 为什么到达是最前面,为什么物流顺序是倒叙的,这是什么用户习惯,这是我拿到设计稿的问题,但是这里不谈设计,因为审美这个东西无法评估.那么这里我就做一个顺序的来对比一下吧 ...

  3. python 面向对象终极进阶之开发流程

    好了,你现在会了面向对象的各种语法了,  但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...

  4. 第二届强网杯部分writeup

    MD5部分 第一题 一看就有些眼熟 emmmm 查看一下源代码: 重点是这里 这里面要求POST上去的参数 param1 != param2 && md5('param1') == m ...

  5. python_函数设计

    >>> def check_permission(func): def wrapper(*args,**kwargs): if kwargs.get('username')!='ad ...

  6. 微信企业向用户银行卡付款API开发详解(PHP)

    最近在实现微信企业向用户银行卡付款时遇到了一些问题,发现官方文档说的太笼统,走了不少弯路,想要在此记录,希望可以帮到大家. 案例:企业付款到银行卡    微信接口链接:https://api.mch. ...

  7. PAT1052:Linked List Sorting

    1052. Linked List Sorting (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...

  8. 简述spring的工作原理

    建议不要硬着头皮看spring代码,本身的代码800多m,就是不上班开始看也不知道什么时候看完.如果想学学ioc,控制反转这些建议看看jodd项目,比较简练,但是我仍然不建议过多的看这些框架的代码,因 ...

  9. JXP

    JSX 初识:它是JavaScript的语法扩展,建议在React中使用它来描述UI的外观. 考虑这个变量声明:   在JSX中嵌入表达式 可以通过将其包含在大括号中来嵌入JSX中的任何JavaScr ...

  10. ansj人名识别

    1.前言 ansj人名识别会用到两个字典,分别是:person/asian_name_freq.data.person/person.dic. 1.1.asian_name_freq.data 这是一 ...