小编gag*_*nbm的帖子

如何使HashMap与数组一起使用?

我使用布尔数组作为HashMap的键.但问题是当一个不同的数组作为键传递时,HashMap无法获取键,尽管元素是相同的.(因为它们是不同的对象).

如何使用数组作为键?这是代码:

public class main {
public static HashMap<boolean[], Integer> h;


public static void main(String[] args){
    boolean[] a = {false, false};

    h = new HashMap<boolean[], Integer>();
    h.put(a, 1);


    if(h.containsKey(a)) System.out.println("Found a");

    boolean[] t = {false, false};

    if(h.containsKey(t)) System.out.println("Found t");
    else System.out.println("Couldn't find t");

}

}
Run Code Online (Sandbox Code Playgroud)

无论是阵列at包含相同的元素,但HashMap的不返回任何东西t.

我如何使其工作?

java arrays hashmap

21
推荐指数
4
解决办法
3万
查看次数

为什么在Java内存模型中允许这种行为?

JMM中的因果关系似乎是其中最令人困惑的部分.我有几个关于JMM因果关系的问题,并允许并发程序中的行为.

据我了解,目前的JMM总是禁止因果关系循环.(我对吗?)

现在,根据JSR-133文档,第24页,图16,我们有一个例子,其中:

原来 x = y = 0

线程1:

r3 = x;
if (r3 == 0)
    x = 42;
r1 = x;
y = r1;
Run Code Online (Sandbox Code Playgroud)

线程2:

r2 = y;
x = r2;
Run Code Online (Sandbox Code Playgroud)

直觉上,r1 = r2 = r3 = 42似乎不可能.但是,它不仅被提及,而且在JMM中也被"允许".

对于这种可能性,我无法理解的文件中的解释是:

编译器可以确定分配给的唯一值x是0和42.从那以后,编译器可以推断出,在我们执行的时候r1 = x,我们刚刚执行了42的写入 x,或者我们刚刚读过x和看过价值42.在任何一种情况下,读取x价值42 是合法的.然后可以r1 = x改为r1 = 42; 这将允许y = r1转换为y = 42更早并执行,从而导致相关行为.在这种情况下,y首先提交写入.

我的问题是,它真的是什么样的编译器优化?(我是编译器无知的.)由于42只被写入有条件,当if …

java concurrency compiler-optimization causality java-memory-model

16
推荐指数
1
解决办法
486
查看次数

在Python中将0和1的字符串转换为字节

我有一个二进制整数的字符串表示,我需要具有精确位结构的字节,通过套接字发送.

例如,如果我有一个长度为16的字符串:0000111100001010那么我需要2个字节的相同位结构.在这种情况下,第一个字节应该是int值,15第二个字节应该是10.它们是否可以以ascii格式打印并不重要.我怎么得到它?

我尝试了以下方法,以形式创建字节0xf0xa.但这个大小为6个字节而不是2个字节.

def getByte(s):
  if(len(s) != 8):
    return
  b = b'0'
  for c in s:
    b = (int(b) | int(c)) & 0x0000ff #This makes b an integer
    b = b << 1
  b = b >> 1 #because of 1 extra shift
  b = hex(b).encode('utf-8') #how else can I get back to byte from int?

  return(b) 
Run Code Online (Sandbox Code Playgroud)

此方法采用长度为8的字符串,并打算提供相同内部位结构的字节,但失败.(我需要类似strtol的内容C.)

有什么帮助吗?

python string binary byte bit

4
推荐指数
1
解决办法
4356
查看次数

Java LinkedList的ConcurrentModificationException

我有对象的LinkedList和迭代器.我知道当您尝试在运行迭代器时修改列表时会抛出此ConcurrentModificationException.但在我的情况下,我不明白这种修改在哪里.

迭代器看起来像这样:

private static void insertTasks(Task t) {
    if(eventQueue.size() == 0) {
        eventQueue.addFirst(tsk);
        return;
    }

    int pos = 0;
    while (itr.hasNext()){
   //The line below throws the exception

        if (t.getArrivalTime() <= itr.next().getArrivalTime() ) 
        {           
            break;
        }
        pos++;
    }
}
Run Code Online (Sandbox Code Playgroud)

insertTasks从另一种方法调用此方法,如下所示:

tsk = null;
tsk = new Task(1,"P1",1,4.0f,1.5f,0.0f,8.0f);
insertTasks(tsk);

tsk = null;
tsk = new Task(0,"P0",2,5.0f,2.5f,1.0f,10.0f);
insertTasks(tsk);
Run Code Online (Sandbox Code Playgroud)

getArrivalTimeTask对象的样子:

public float getArrivalTime() { return arrivalTime; }
Run Code Online (Sandbox Code Playgroud)

我的问题是,我在哪里做这个修改?while我运行它的循环iterator没有做任何修改.可以 ?

我错过了什么吗?

java iterator linked-list

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

MapStruct-如何为不同的映射方法设置不同的null策略?

我想拥有一个Mapper同时包含createupdate方法的类。为create方法生成的代码很好,但是在更新的情况下,仅当源中的属性不为null时,我才想在目标中设置属性。

我该怎么做mapStruct

之所以会出现混乱,是因为nullValueMappingStrategyMapperMapping级别上定义。

如果我将该值设置为Mapper级别,它将应用于所有方法,包括创建和更新。

@Mapper // If I define null strategy here, it will be applied to all methods
public interface AmcPkgMapper {

    AmcPkgMapper MAPPER = Mappers.getMapper(AmcPkgMapper.class);

    AmcPackage create(AmcPackageRequest amcPackageRequest);

    // How to define the null strategy here??
    void update(AmcPackageRequest amcPackageRequest, @MappingTarget  AmcPackage amcPackage);

}
Run Code Online (Sandbox Code Playgroud)

并且,如果我使用将该方法设置为方法Mapping,则它希望我定义一个target对象,为此,我可能需要一个包装对象,并以某种方式映射其中的所有内部属性。

@Mapping(target = "amcPackage", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void update(AmcPackageRequest amcPackageRequest, @MappingTarget AmcPackageWrapper amcPackageWrapper);
Run Code Online (Sandbox Code Playgroud)

使用上述方法,生成的代码如下所示,该代码无需amcPackage …

mapstruct

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