CS61B 03 List

本文探讨了Java中关于引用和列表的概念,包括基本类型、引用类型、参数传递的黄金规则、数组的实例化以及IntList和链接数据结构。特别强调了引用在对象创建和赋值过程中的作用,以及递归数据结构的潜在问题。
摘要由CSDN通过智能技术生成

Reference And List

Walrus a = new Walrus(100, 8.3);
Walrus b;
b = a;
b.weight = 5;
System.out.println(a);
System.out.println(b);

result ={a.weight = 5  b.weight = 5}

VS

int x = 5;
int y;
y = x;
x =2;
System.out.println("x is:" + x);
System.out.println("y is:" + y);

result ={x is: 2   y is: 5}

Bits

Your computer stores information in “memory”

  • Information is stored in memory as a sequence of ones and zeros
    • Example: 72 stored as 01001000 the same as ‘H’
    • Example: True stored as 00000001

Each Java type has a different way to interpret the bits:

  • 8 primitive types in Java: byte, short, int, long, long, float, double, boolean, char

Primitive Types

When you declare a variable of a certain type in Java;

  • Your computer sets aside exactly enough bits to hold a thing of that type
    • int —> 32 bits
    • double —> 64 bits
  • Java creates an internal table that maps each variable name to a location
  • Java does NOT write anything into the reserved boxes(boxes是用来存放二进制的)

Reference Types

When we instantiate an Object:

  • Java first allocates a box of bits for each instance variable of the class and fills them with a default value(e.g.0, null)
  • The constructor then usually fills every such box with some other value

Can think of new as returning the address of the newly created object

  • Addresses in Java are 64 bits.
  • If object is created in memory location 811617896, then new returs 811617896
000……000[00001111101000][01000011001100110011001100110101]000……000
03-01 03-02

b和a都存储了同样的01序列,指向了同一个实例对象,所以b.weight的变化会影响a.weight


Parameter Passing

Given variables b and a:

  • b = a copies all the bits from a into b

Passing parameters obeys the same rule: Simply copy the bits to the new scope (This is also called by value)

The golden rule:
  • b = a copies the bits form a into b
  • Passing parameters copies the bits

Instantiation of Arrays

Arrays are also Objects. As we’ve seen, objects are(usually)instantiated using the new

  • Planet p = new Plant(0, 0, 0, 0, 0, “blah.png”);
  • int[] x = int[]{0, 1, 2, 95, 4}; //实际位数要比32*5位要稍微大一些,多出来的空间存储其他信息

int[] a;

  • Declaration creates a 64 bit box intended only for storing a reference to an int array. No object is instantiated
  • Creates a new Object, int this case an int array
  • Puts the address of this new Objects into the 64 bit box named a.
  • If we were to reassign a to something else, we’d never be able to get the original Object back!

IntList and Linked Data Structures

Let’s define an IntList as an object containing two member variables

  • int first;
  • IntList rest;

IntList这个数据结构存在指向的形式,导致读取其上的元素需要一些递归操作,而由于程序员手动递归获取元素,那就很容易出错(“暴露的递归数据结构”)

第一种实现方式:用前一个IntList

public class IntList{
    public int first;
    public IntList rest;
    
    public static void main(String[] args){
        IntList L = new IntList();
        L.first = 5;
        L.rest = null;
        //print out
        System.out.println(L.first);
        System.out.println(L.rest);
        
        L.rest = new IntList();
        L.rest.first = 10;
        //print out
        System.out.println(L.rest.first);
        System.out.println(L.rest.rest);
        
        L.rest.rest = new IntList();
        L.rest.rest.first = 15;
        //print out
        System.out.println(L.rest.rest.first);
        System.out.println(L.rest.rest.rest);
    }
}

输出结果:

Compiling IntList.java.......
-----------OUTPUT-----------
5
null
10
null
15
null
[Finished in 0.7s]

用Java Visualizer可视化:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6jRE7lzD-1620121620377)(…/…/image-20210504092308079-1620091391446.png)]

public class IntList{
	public int first;
	public IntList rest;

	public IntList(int f, IntList r){
		first = f;
		rest = r;
	}

	public static void main(String[] args) {
		IntList L = new IntList(15, null);
		L = new IntList(10, L);
		L = new IntList(5, L);	

		System.out.println(L.first);
        System.out.println(L.rest);

        System.out.println(L.rest.first);
        System.out.println(L.rest.rest);
        
        System.out.println(L.rest.rest.first);
        System.out.println(L.rest.rest.rest);
        
        System.out.println(L.size());
	}
}

print out:

Compiling IntList.java.......
-----------OUTPUT-----------
5
IntList@5ca881b5 //应该是内存地址
10
IntList@24d46ca6
15
null
[Finished in 0.7s]
Size

//Return the size of the list using recursion

public int size(){
	if( rest == null){
        return 1;
    }
    return 1 + this.rest.size();
}

//Return the size of the list using no recursion

public int size(){
    IntList p = this;
    int total = 0;
    while (p != 0){
        total += 1;
        p = p.rest;
    }
    return total;
}

这里遇到了一个关于this指针的问题,参考了csdn上的文章:

this.属性名称                

//指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题)

//传入的参数变量名与类中属性变量名重复,因此我们在set方法和有参构造方法中加上了this.类属性名称,这样就可以完成对 对象变量的赋值
    
Person(String name,int age,String gender){
		this.name = name;
		this.age = age;
		this.gender = gender;

名称

//指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题)

//传入的参数变量名与类中属性变量名重复,因此我们在set方法和有参构造方法中加上了this.类属性名称,这样就可以完成对 对象变量的赋值

Person(String name,int age,String gender){
this.name = name;
this.age = age;
this.gender = gender;




数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值