Kayleh

java.lang.Integer

Integer

缓存

先看一段代码

Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a == b);//true
System.out.print(c == d);//false

Integer a = 1;
Integer a = new Integer(1);
System.out.print(a == b);//false

Integer类型在-128—>127范围之间是被缓存了的,也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,不会有新的对象产生,而大于这个范围,将会重新创建一个Integer对象,也就是new一个对象出来,当然地址就不同了,也就!=;

随机权值选择算法

按权值随机选择算法

给你一个 下标从 0 开始 的正整数数组 w ,其中 w[i] 代表第 i 个下标的权重。

请你实现一个函数 pickIndex ,它可以 随机地 从范围 [0, w.length - 1] 内(含 0 和 w.length - 1)选出并返回一个下标。选取下标 i 的 概率 为 w[i] / sum(w) 。

例如,对于 w = [1, 3],挑选下标 0 的概率为 1 / (1 + 3) = 0.25 (即,25%),而选取下标 1 的概率为 3 / (1 + 3) = 0.75(即,75%)。

输入:
["Solution","pickIndex","pickIndex","pickIndex","pickIndex","pickIndex"]
[[[1,3]],[],[],[],[],[]]
输出:
[null,1,1,1,1,0]
解释:
Solution solution = new Solution([1, 3]);
solution.pickIndex(); // 返回 1,返回下标 1,返回该下标概率为 3/4 。
solution.pickIndex(); // 返回 1
solution.pickIndex(); // 返回 1
solution.pickIndex(); // 返回 1
solution.pickIndex(); // 返回 0,返回下标 0,返回该下标概率为 1/4 。

由于这是一个随机问题,允许多个答案,因此下列输出都可以被认为是正确的:
[null,1,1,1,1,0]
[null,1,1,1,1,1]
[null,1,1,1,0,0]
[null,1,1,1,0,1]
[null,1,0,1,0,0]
......
诸若此类。

来源:力扣(LeetCode)

离散图论2:邻接矩阵

假设节点为[a,b,c,d],在邻接矩阵中,

  • 无向图:如果v1到v2有边,则邻接矩阵M[v_1][v_2]=M[v_2][v_1]=1,否则=0.

    M[0]中的值为1的元素的个数为a(节点0)的度,M[i][0]中的值为1的元素的个数也为a(节点0)的度,因为在无向图中,邻接矩阵是以对角线对称的。

  • 有向图:M[0]中的值为1的元素的个数为a(节点0)的出度,M[i][0]中的值为1的元素的个数也为a(节点0)的入度

  • 带权图:如果v1到v2有边,则邻接矩阵M[v_1][v_2]=W_1_2, 否则为正无穷

优点:

  • 快速判断两顶点是否有边
  • 方便计算各顶点的度

缺点

java.lang.String

String

String类表示字符串。 Java 程序中的所有字符串文字,例如”abc” ,都是作为此类的实例实现的。
字符串是常量; 它们的值在创建后无法更改。 字符串缓冲区支持可变字符串。 因为 String 对象是不可变的,所以它们可以共享。 例如:

String str = "abc";

相当于:

char data[] = {'a', 'b', 'c'};
String str = new String(data);