程序=数据结构+算法

来源:互联网 发布:网络说唱歌曲大全 编辑:程序博客网 时间:2024/06/05 02:37

1.指针与对象的关系示意图:
这里写图片描述
一个指针只能指向一个对象,可以不指向任何对象,称为空指针,值为null
一个对象可以由多个指针指向它,如果一个对象没有任何指针指向它,那这个对象就是垃圾对象

2.对象的内存表示
这里写图片描述
为什么y不跟随对象的存储空间?
因为数据是静态的,不管创建多少个对象,都有一个静态数据y,这样下来,大大减少了内存的消耗,方法区也是如此。对象=数据+方法

3.字符串的内存表示
这里写图片描述
a,b,c三个指针的值相等。指向同一个对象,即,a,b,c是表示同一个对象
字符串池的特点:
1)所存储的对象的内容不会重复
2)如果串池里面的对象没有任何指针指向它,并且变成了不在被使用的对象,也不会被垃圾回收机制回收。

4.数组的内存表示
任何一个对象都不能在它的内存包含另一个对象,最多也就能包含其他对象的指针
优点:存储空间连续,
缺点:不能扩展空间,因为会破坏其他对象的存储空间

5.多态的实现
A a=new C();
A类指针c = C类的对象 (称为指针泛化),泛型。

6.单链表的实现(单链表:线性数据结构之一,数组也是一种线性结构)
优点:可以解决数组不方便数据的插入和删除的问题
缺点:随机访问慢,这点远远不如数组。
特点:存储空间不用连续
这里写图片描述

这里写图片描述

说明:将指向20的指针指向30或者其他,这样20就被删除了,至于20就变成了垃圾对象,将会被回收。

java代码实现:package cn.itcast.structure;class MyList {    private int data;    private MyList next;    public MyList(int x) {        data = x;    }    public void add(MyList x) {        x.next = next;        next = x;    }    public void append(MyList x) {        MyList p = this;        while (p.next != null) {            p = p.next;        }        p.next = x;    }    public void show() {        MyList p = this;        while (p != null) {            System.out.println(p.data);            p = p.next;        }    }}public class DanLianBiao {    public static void main(String[] args) {        MyList head = new MyList(10);        head.append(new MyList(30));        head.append(new MyList(40));        head.append(new MyList(50));        head.add(new MyList(20));        head.show();    }}

7.循环线性结构
这里写图片描述
这里写图片描述
如果最后一个的后继指向第一个元素,第一个元素的前驱指向最后一个元素,就成了循环链表,这样一来,在操作的时候,就不分前后了。

8.队列与栈
这里写图片描述
9.二叉树排序
两种分叉关系:1)树(无循环关系)
2)图
什么是二叉树:就是每个节点都只有两个分叉:左子树和右子树
这里写图片描述
遍历
这里写图片描述
前序遍历:总是先访问根节点,在访问左子树和右子树 (根–>左–>右)
中序遍历:先左子树,然后根,再右子树。(左–>根–>右)
这里写图片描述

个人学习时的总结:如果对大家深入理解JAVA的底层原理有帮助,请点赞,如果有不对劲的地方希望指出,谢谢!

原创粉丝点击