数据结构Java版(1)——数组

这篇具有很好参考价值的文章主要介绍了数据结构Java版(1)——数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、数据结构

  1. 是一门基础学科
  2. 研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据和修改数据
  3. 数据结构可以分为三类: 线性结构: 数组、队列、栈、链表、哈希表… 树型结构:二叉树、二分搜索树、AVL树,红黑树、堆、Trie、线段树、并查集… 图结构:邻接矩阵、邻接表 排序算法
  4. 为什么学习数据结构: 根据不同的应用,灵活选择最合适的数据结构

数据结构 + 算法 = 程序

二、数组

1、数组基础

  • 用来存储一组类型相同的数据
  • 在内存中,分配连续的空间,数组创建时要指定容量(大小)
  • 数据类型[] 数组名 int[] arr = new int[10] int[] arr2 = {1,2,3,4}
  • 索引---访问数组时通过索引进行操作
  • 索引从0开始,最大为 arr.length -1
  • 常见的错误: NullPointException和ArrayIndexOutOfBoundsException
  • 常见的数组: 字符串, 对象数组,哈希表

2.Java中数组的特点

(1)数组在内存中连续分配;

(2)创建数组时要指明数组的大小;

(3)可以通过索引进行访问,索引从0开始,这里索引可以理解为偏移量;

(4)使用索引:

  • 获取指定索引位置的值——arr[index]
  • 修改指定索引位置的值——arr[inedx]
  • 删除数组中元素(假删除)

(5)数组的遍历:将数组中元素打印出来;

(6)数组创建好之后,大小不能改变。

3.演示数组的使用

import java.util.Arrays;
import java.util.Comparator;

public class ArrayDome {
    public static void main(String[] args) {
        //练习数组的相关知识
        //1.定义数组
        int[] ints  =  new int[]{1,1,4,5,1,4};
        //获取数组长度
        int length = ints.length;
        //获取指定元素位置
        int num = ints[2];
        System.out.println(num);
        //修改元素
        ints[2] =100;
        num = ints[2];
        System.out.println(num);
        //遍历数组
        for(int i= 0;i < ints.length;i++){
            System.out.print(ints[i]+"\t");
        }
        System.out.println();
        //数组越界错误
        try{
            System.out.println(ints[length]);
        }catch (Exception e){
            e.printStackTrace();
        }
        //数组为空错误
        String[] strings = null;
        try{
            System.out.println(strings);
            length = strings.length;
        }catch (Exception e){
            e.printStackTrace();
        }
        //数组的排序
        Arrays.sort(ints);
        for(int i= 0;i < ints.length;i++){
            System.out.print(ints[i]+"\t");
        }
        System.out.println();
    }
}

输出结果:

数据结构Java版(1)——数组,Java,数据结构,数据结构,java

4.制作自己的数组

package leetcoke;

import java.util.Arrays;
import java.util.Comparator;

public class MyArray<T> {
    private T[] data;
    private int length;
    private int size;

    //构造方法
    public MyArray(int size) {
        if (size <= 0) {
            this.size = 16;
        } else {
            this.size = size;
        }
        this.length = 0;
        this.data = (T[]) new Object[this.size];
    }

    //获得当前的数组容量
    public int getSize() {
        return this.size;
    }

    //判断是否为空
    public boolean isEmpty() {
        return this.length == 0;
    }

    //添加
    public void add(T data) throws IllegalAccessException {
        add(this.length,data);
    }

    //在指定位置添加
    public void add(int index, T data) throws IllegalAccessException {
        if (index < 0 || index > this.length) {
            throw new IllegalAccessException("你看你传的是个啥!");
        }
        //判断数组已满
        if(this.size==this.length){
            //扩容
            resize(this.size*2);
        }

        for (int i = this.length; i > index; i--) {
            this.data[i] = this.data[i - 1];
        }
        this.data[index] = data;
        this.length++;
    }

    //扩容
    private void resize(int newCapacity){
        T[] newData = (T[]) new Object[newCapacity];
        newData = Arrays.copyOf(this.data,newCapacity);
        this.data = newData;
        this.size = newCapacity;
    }

    //修改指定位置的值
    public void modifyValueByIndex(int index, T value) throws IllegalAccessException {
        //入参判断
        if (index < 0 || index >= this.size) {
            throw new IllegalAccessException("你看你传的是个啥!");
        }
        this.data[index] = value;
    }

    //获取位置上的值
    public T getValueByIndex(int index) throws IllegalAccessException {
        //入参判断
        if (index < 0 || index >= this.size) {
            throw new IllegalAccessException("你看你传的是个啥!");
        }
        return this.data[index];
    }

    //查询
    public int containsValue(T val) {
        int i;
        for (i = this.length - 1; i >= 0; i--) {
            if (this.data[i] == val) {
                return i;
            }
        }
        return i;
    }

    //根据索引删除
    public T removeByIndex(int index) throws IllegalAccessException {
        //入参判断
        if (this.length == 0) throw new IllegalAccessException("已经一点都不剩下了!");
        if (index < 0 || index >= this.size) {
            throw new IllegalAccessException("你看你传的是个啥!");
        }
        T res = this.data[index];
        for (int i = index + 1; i < this.length; i++) {
            this.data[i - 1] = this.data[i];
        }
        this.length--;
        if(this.length<=this.size/3 && this.size/2!=0){
            resize(this.size/2);
        }
        return res;
    }


    @Override
    public String toString() {
        StringBuffer buffer = new StringBuffer("[");
        for (int i = 0; i < this.length; i++) {
            buffer.append(this.data[i]);
            if (i != this.length - 1) {
                buffer.append(",");
            }
        }
        buffer.append("]");
        return buffer.toString();
    }

    //排序
    private T[] toArray1() {
        return Arrays.copyOf(data, length);
    }

    public void sort() {
        T[] array = toArray1();
        Arrays.sort(array, new Comparator<T>() {
            @Override
            public int compare(T o1, T o2) {
                if ((o1 instanceof Integer) || (o1 instanceof Float) || (o1 instanceof Double) || (o1 instanceof Short) || (o1 instanceof Long) || (o1 instanceof Byte)) {
                    return (Integer) o1 - (Integer) o2;
                }
                return 0;
            }
        });
        for(int i = 0;i < this.length;i++){
            this.data[i] = array[i];
        }
    }

    public static void main(String[] args) throws IllegalAccessException {
        MyArray<Integer> array = new MyArray<>(5);
        //输入数组的值
        for (int i = 0; i < 5; i++) {
            array.add((int) (Math.random() * 100 % 11));
        }
        try {
            System.out.println(array.getSize());
            array.add(3, 8);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //排序
        array.sort();
        //遍历
        System.out.println(array);

        //查询
        try {
            System.out.println(array.getValueByIndex(2));
            //找索引
            System.out.println("8在数组中的位置为:" + array.containsValue(8));
        } catch (Exception e) {
            e.printStackTrace();
        }

        //删除值
        try {
            System.out.println(array.removeByIndex(array.containsValue(8)));

        } catch (Exception e) {
            e.printStackTrace();
        }


        //删除索引的位置
        try {
            System.out.println(array.removeByIndex(3));


        } catch (Exception e) {
            e.printStackTrace();
        }

        //向数组中指定位置添加元素
        try {
            System.out.println(array.getSize());
            array.add(3, 8);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(array);


        coke coke1 = new coke("coke", 18);
        coke coke2 = new coke("coke", 20);
        MyArray<coke> cokeMyArray = new MyArray<>(0);
        cokeMyArray.add(coke1);
        cokeMyArray.add(coke2);
        System.out.println(cokeMyArray);
    }
}

 文章来源地址https://www.toymoban.com/news/detail-803729.html

到了这里,关于数据结构Java版(1)——数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 数据结构篇-用链表、数组实现队列(数组实现:循环队列)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 队列的说明         1.1 队列的几种常用操作         2.0 使用链表实现队列说明         2.1 链表实现队列         2.2 链表实现队列 - 入栈操作         2.3 链表实现队

    2024年02月05日
    浏览(40)
  • Java 数据结构篇-用数组、堆实现优先级队列

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍    文章目录         1.0 优先级队列说明         2.0 用数组实现优先级队列         3.0 无序数组实现优先级队列         3.1 无序数组实现优先级队列 - 入队列 offer(E value)         3.2 无序数组实现优先

    2024年02月04日
    浏览(46)
  • 用java以数组为底层数据结构创建自己的栈

    栈可以解决什么问题呢: 1.括号匹配问题 2.递归 3.表达式求值问题 首先明确栈的功能: 1.入栈:给底层数组的尾部插入元素相当于入栈 2.出栈:把底层数组的最后一个元素提出来相当于出栈 3.获取栈长度:获取size 4.判断栈是否为空:底层数组size==0则为空 5.获取栈顶:返回底层

    2024年01月20日
    浏览(44)
  • 【数据结构与算法】1、学习动态数组数据结构(基本模拟实现 Java 的 ArrayList 实现增删改查)

    🍃 数据结构是 计算机 存储 、 组织 数据的方式 🎉 线性 结构 线性表(数组、链表、栈、队列、哈希表) 🎉 树形 结构 二叉树 AVL 树 红黑树 B 树 堆 Trie 哈夫曼树 并查集 🎉 图形 结构 邻接矩阵 邻接表 🎁 线性表是具有 n 个 相同类型元素 的有限 序列 (n = 0) a1 是首节点

    2024年02月10日
    浏览(78)
  • java数据结构与算法刷题-----LeetCode209. 长度最小的子数组

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 代码:时间复杂度O(n).空间复杂度O(1)

    2024年01月21日
    浏览(54)
  • 【JavaSE专栏48】Java集合类ArrayList解析,这个动态数组数据结构你了解吗?

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了 Java 中集合类 ArrayList 的语法、使用说明和应用场景,并给出了样例代码。

    2024年02月16日
    浏览(60)
  • Java常见的数据结构:栈、队列、数组、链表、二叉树、二叉查找树、平衡二叉树、红黑树

    数据结构是计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率 栈 队列 数组 链表 二叉树 二叉查找树 平衡二叉树 红黑树... 后进先出,先进后出 数据进入栈模型的过程称为

    2024年02月07日
    浏览(46)
  • Java数据结构学习和源码阅读(线性数据结构)

    链表的数据结构 一组由节点组成的数据结构,每个元素指向下一个元素,是线性序列。 最简单的链表结构: 数据 指针(存放执行下一个节点的指针) 不适合的场景: 需要循环遍历将导致时间复杂度的提升 链表分类—单向链表 链表结构: 数据 指针 Next(指向下一个节点)

    2024年02月12日
    浏览(46)
  • Java数据结构

    java数据结构有: 1、数组                                2、列表  (List) 3、集合(Set)                   4、栈 (Stack)                                   5、队列  (Queue)                6、树 (Tree)                                  7、堆 (Heap)       

    2024年02月08日
    浏览(38)
  • Java 数据结构集合

    详细请转到@pdai的博客 1.1 数组 (Array) 数组的优点: 存取速度快 数组的缺点: 事先必须知道数组的长度 插入删除元素很慢 空间通常是有限制的 需要大块连续的内存块 插入删除元素的效率很低 源码分析: 1、底层数据结构是Object 2、构造函数包括无参构造和有参数构造,有参构

    2024年01月24日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包