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

  • 相关阅读:
    会议室预订系统
    event chrome firefox 获取点击对象的 id 类
    微信支付 301 500 php 7 simplexml_load_string
    会议室预订
    ini_set('date.timezone','Asia/Shanghai');
    UnionID OpenID
    Location 接口表示其链接到的对象的位置
    confirm() event.target.getAttribute('id')
    php 代替 js实现自定义时间选择器
    前端页面 重复提交避免
  • 原文地址:https://www.cnblogs.com/wyq1995/p/10787893.html
Copyright © 2020-2023  润新知