zoukankan      html  css  js  c++  java
  • java数据结构和算法01(数组的简单使用)

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

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

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

    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,哈哈哈!只是实现了最简单的功能!

  • 相关阅读:
    ubuntu 制做samba
    《Programming WPF》翻译 第4章 前言
    《Programming WPF》翻译 第4章 3.绑定到数据列表
    《Programming WPF》翻译 第4章 4.数据源
    《Programming WPF》翻译 第5章 6.触发器
    《Programming WPF》翻译 第4章 2.数据绑定
    《Programming WPF》翻译 第4章 1.不使用数据绑定
    《Programming WPF》翻译 第5章 7.控件模板
    《Programming WPF》翻译 第5章 8.我们进行到哪里了?
    《Programming WPF》翻译 第5章 5.数据模板和样式
  • 原文地址:https://www.cnblogs.com/wyq1995/p/10787893.html
Copyright © 2011-2022 走看看