内部类与我们数据结构之间的关系(节点创建问题)


前言

文章主要了内部类与数据结构之间的运用,能为新手小白在学习数据结构编码实现我们数据结构中有一个引导作用。
这一篇文章我会举上我在平日数据结构学习和项目学习中的例子。


一、内部类到底是什么?

内部类很通俗的定义是嵌套类,就是在一个已经声明的类中我们继续创建一个类,这个类的作用就是方便我们外部类的编码。而且在其他类中创建内部类会有特殊的方法,与我们平日中创建类的方法会有所不同。在其他类中,创建我们本类中内部类具体的如下所示:

//解释
outClass outClassName = new outClass();//创建外部类对象
//利用我们的外部类对象创建我们的内部类对象
outClass.innerClass innerObjecttName = outClassName.new innerClass();

1,为什么会使用我们在其他类中创建我们内部类的办法呢?

因为当时我们的项目中,有一个用户类,用户类里面有一个抽象数据结构,我们当时做项目架构搭建的时候选择了类似于数据结构的存储的方式,所以需要学习我们内部类在其他类中创建的方法。本来我想使用直接创建的方式,然后我发现了,idea对我这种内部类创建报错,需要我们将我们内部类变为我们的静态类,才能使用平时我们对象创建存储。

但这明显是不符合我们的需求的,因为我们的用户不可能仅仅只有一个,如果是静态的话,那么就是代表我们所有人使用这一份资料。所以我们需要这个类与我们用户类绑定的同时,还需要在其他类中创建我们内部类。

2,为什么会使用我们的内部类和数据结构的关系是什么?

内部类其实最大的用处是为提供我们的外部类的便利,就是内部类抽象封装属性可以更好的实现。
举个最常见的数据结构——链表,链表从宏观来看的话就是一条线,有顺序,可以存储数据。那么链表的实现,离不开我们存储数据还有下一个节点的指针域或者还用指向前一个节点的指针域,那么这个实现的过程就离不开我们的内部类的使用。
然后在宏观上我们给这个内部类节点增加我们增删改查的操作,这就是我们常见数据结构的实现方式了。

public class List{
	class ListNode {
        int val;
        ListNode next = null;
    }
    public ListNode(int val){
    	this.val = val;
    }
 }

这个就是单链表的节点,一个节点中存储着数据还有我们指向我们下一个节点的指针域。还有一个构造函数用于创建我们新的节点。我们内部类是不涉及所有的操作的,所以我们只要确定我们所实现的数据结构中节点所需要什么数据就好了!

二、在c语言中,内部类的形式是什么呢?

大家学习的时候应该大多数都会使用我们C语言作为我们数据结构实现的语言,c语言这一个面向过程的语言是怎么实现我们类似与我们的JAVA的内部类的操作呢?
大家应该学过结构体还有指针吧!结构体的作用其实给我的感觉就像我们类一般,但是这个结构体是不能包含方法,C语言就是使用我们嵌套结构体来实现我们类似与我们JAVA内部类操作。
这里我依旧是使用我们单链表例子来讲解下我们的嵌套内部类!

struct Node;//节点结构体声明
typedef struct Node *PtrToNode;
typedef PtrToNode List;

struct Node{
	ElementType Element;
	Position Next;
}

第三段代码的意思就是声明了一个Node的链表,我们会发现这里其实使用有两个结构体的,第一个结构体是声明我们节点,第二结构体是将我们节点与我们链表进行绑定,即是一个由内向外的过程,和我们内部类的写法有一点不一样,内部类先声明外部类,再外部类中写我们的内部类;而嵌套结构体,是先写我们的内部节点,再声明外部数据类型。但是两种语言实现我们数据结构方式相似。


总结

数据结构在我们项目学习,刷题中非常之常见。在刚刚开始学习的时候,我常常会疑惑我们是如何实现我们数据结构的,更多的疑问点都会在我们编码过程,就像我们节点创建的情况,尤其是在C语言实现的过程中,总会觉得嵌套结构体的奇怪。但是换了成java去实现我们常见的数据结构的时候,发现这个嵌套结构体,莫过于我们从微观出发转为宏观。而我们内部类就是宏观转为微观的过程。
希望我的数据结构学习生涯中一个大难点的一些思考,这些思考能帮到更多刚刚学习数据结构无从下手的同学!!如果文章出现错误,希望大家指正!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值