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的底层原理有帮助,请点赞,如果有不对劲的地方希望指出,谢谢!