小编qbi*_*bit的帖子

真的需要浅拷贝吗?

我目前正在研究Java的图形库.如你所料,有一个Vertex班级.该类包含一个类型的对象,VertexData<T>它本身可以包含任何东西.
(我知道这可能是多余的,我可以这样做,Vertex<T>但为了问题的目的,这无关紧要).
我制作了一个VertexData<T>实现,Cloneable并有一个public VertexData<T> clone() 方法通过序列化和反序列化调用返回深层副本,Object就像这里描述的那样

现在问题是,因为我确实有一个深度复制方法,所以有一个浅拷贝是否有意义?如果是这样的话,那么浅拷贝比深拷贝更受欢迎的情况是什么?

更新:由于大多数答案和评论都包含对浅层副本的某种解释,我觉得我必须澄清一点.我知道浅色副本是什么,它是如何工作的,一切.我的问题是,因为它是我正在开发的,并且因为我确实创建了一个深度复制方法,所以为浅层复制提供方法是否有意义?

我也在这里添加,VertexData<T>类中没有原始类型.
因此,在用于存储图库的 Vertex数据的容器类的上下文中,是否需要浅层复制?
如果是这样,你能想到一个例子,在我正在开发的范围内吗?
如果不是我应该只为了完整性添加浅拷贝方法?
这是一个好习惯还是没关系?

java generics deep-copy

8
推荐指数
1
解决办法
711
查看次数

禁止nginx访问被拒绝错误日志

我在nginx中设置了一些规则以拒绝IP访问.这很好用,但是对于来自拒绝IP的每个请求,都会记录以下开头的错误:

[error] 7325#0: *5761 access forbidden by rule, client...
Run Code Online (Sandbox Code Playgroud)

有没有办法抑制这些"错误"被记录?

logging nginx

7
推荐指数
1
解决办法
1081
查看次数

如果java抽象类"Number"的任何对象等于零

我正在尝试创建一个泛型函数,它接受任何类型的Number条件并且如果该数字等于零则有条件地执行某些操作.我希望任何人能够传递任何扩展Number的类(BigDecimal,BigInteger,Byte,Double,Float,Integer,Long或Short)

到目前为止,我试图instanceof找出数字的类型,然后将其与等效类型进行比较

public static boolean isZero(Number number) {
    if (number instanceof BigDecimal) {
        return BigDecimal.ZERO.equals(number);
    } else if (number instanceof BigInteger) {
        return BigInteger.ZERO.equals(number);
    } else if (number instanceof Byte) {
        return new Byte((byte) 0).equals(number);
    } else if (number instanceof Double) {
        return new Double(0).equals(number);
    } else if (number instanceof Float) {
        return new Float(0).equals(number);
    } else if (number instanceof Integer) {
        return new Integer(0).equals(number);
    } else if (number instanceof Long) {
        return new …
Run Code Online (Sandbox Code Playgroud)

java numbers

5
推荐指数
1
解决办法
786
查看次数

为什么intern方法不会在java中返回相等的String

public static void main (String[] args) {

    String s1 = new String("hello");
    String s2 = new String("hello");
    s1.intern();
    s2.intern();        
    System.out.println(s1 == s2); // why this returns false ?


}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,第一次调用实习方法应该创建一个带有单个字符串的"字符串实习池" "hello".第二次调用实习方法没有做任何事情(因为"hello"字符串已经存在于池中).现在,当我说s1 == s2我希望JVM比较"hello"字符串实习池中的字符串并返回时true.

java

5
推荐指数
1
解决办法
220
查看次数

动态规划最小化背包

我很好奇是否有可能修改(或使用)无限制背包问题的DP算法,以使背包中物品的总价值最小化,同时使总重量至少达到一些最小约束C。


自底向上的DP算法,用于UKP的最大化版本:

let w = set of weights (0-indexed)

and v = set of values (0-indexed)

    DP[i][j] = max{ DP[i-1][j], DP[i][j - w[i-1]] + v[i-1] }

for i = 0,...,N and j = 0,...,C

given DP[0][j] = 0 and DP[i][0] = 0

where N = amount of items

and C = maximum weight

DP[N][C] = the maximum value of items for a knapsack capacity of C 
Run Code Online (Sandbox Code Playgroud)

我们可以使UKP最小化吗?如果没有,谁能提供其他解决方案或技术来解决这样的问题?

谢谢,丹

algorithm knapsack-problem dynamic-programming

5
推荐指数
1
解决办法
2844
查看次数

LLVM 检索 AllocaInst 的名称

我正在尝试检索传递给调用的指针的名称cudaMalloc

CallInst *CUMallocCI = ... ; // CI of cudaMalloc call
Value *Ptr = CUMallocCI->getOperand(0);
if (AllocaInst *AI = dyn_cast<AllocaInst>(Ptr) != nullptr) {
  errs() << AI->getName() << "\n";
}
Run Code Online (Sandbox Code Playgroud)

然而上面只是打印一个空行。是否可以从该分配中获取指针名称?

这是相关的IR:

%28 = alloca i8*, align 8
...
...
call void @llvm.dbg.declare(metadata i8** %28, metadata !926, metadata !DIExpression()), !dbg !927
%257 = call i32 @cudaMalloc(i8** %28, i64 1), !dbg !928
...
...
!926 = !DILocalVariable(name: "d_over", scope: !677, file: !3, line: 191, type: !22)
!927 = !DILocation(line: 191, …
Run Code Online (Sandbox Code Playgroud)

c++ cuda llvm llvm-ir

5
推荐指数
1
解决办法
1043
查看次数

BufferedWriter没有打印新行

我用:

bw = new BufferedWriter(new FileWriter("C:\\Users\\MyUser\\Desktop\\docum.txt"));
bw.write("Hello, world!\n");
bw.write("Hello!);
Run Code Online (Sandbox Code Playgroud)

但它是打印的"Hello, world!Hello!",没有newline打印.我该怎么办?非常感谢

java bufferedwriter

0
推荐指数
1
解决办法
139
查看次数

在Java中切换语句与Ifs

Herbert Schildt在" 完整的参考文献 " - 第5章:

switch语句通常比一组嵌套ifs更有效.

当编译器编译switch语句时,它会检查每个case常量并创建一个"Jump Table",它将用于根据表达式的值选择执行路径.因此,如果需要在一大组值中进行选择,则switch语句的运行速度将比使用if-elses序列编码的等效逻辑快得多.编译器可以这样做,因为它知道case常量都是相同的类型,并且必须与switch表达式进行相等性比较.编译器没有if表达式的长列表.

  1. " JUMP TABLE " 这个词是什么意思?

  2. Switch与if-statements的不同之处在于,switch只能测试相等性,而if可以评估任何类型的boolean表达式.如果a switch(expression)与任何case常量都不匹配,那意味着它进入了defaultcase.这不是一个不平等的情况吗?这让我想到具有之间没有这么大的差异switchif.

  3. 从同一本书的摘录中,他写道:

    if-then-else语句可以基于值或条件的范围来测试表达式,而switch语句仅基于单个整数,枚举值或String对象来测试表达式.

    if不是比那更强大switch吗?

  4. 我曾在Core Java的不同项目中工作,但从未觉得需要使用该switch语句,也没有看到其他同事使用它.甚至没有一次.为什么一个更强大的switch控制声明无法if在可用性方面落地?

java

0
推荐指数
1
解决办法
1639
查看次数