我正在寻找一种方法,在32位数字中使用1的数字而不使用其间的循环.任何人都可以帮助我,并为我提供代码或算法.提前致谢.
我有一个对象的列表,在我们的例子中被称为规则,这个对象本身是一个字段列表,我必须对其进行哈希码比较,因为我们不能在系统中复制规则.
即假设我有两个规则R1和R2,字段为A和B.
现在,如果R1中A和B的值分别为7和2.
在R2中它分别是3和4然后我用来检查系统中规则的重复性的过程是哈希码比较失败
我使用的方法是
for(Rule rule : rules){
changeableAttrCode=0;
fieldCounter=1;
attributes = rule.getAttributes();
for(RuleField ruleField : attributes){
changeableAttrCode = changeableAttrCode + (fieldCounter * ruleField.getValue().hashCode());
fieldCounter++;
}
parameters = rule.getParameters();
for(RuleField ruleField : parameters){
changeableAttrCode = changeableAttrCode + (fieldCounter * ruleField.getValue().hashCode());
fieldCounter++;
}
changeableAttrCodes.add(changeableAttrCode);
Run Code Online (Sandbox Code Playgroud)
这里是changeableAttrCodes,我们存储所有规则的哈希码.
那么请建议我更好的方法,以便将来不会出现这种问题,也可以看出系统中的规则错误.
提前致谢
我试图通过线程执行在 run 方法中打印线程局部变量,但它显然为空。请查找代码获取信息---
public class EvenAndOdd implements Runnable{
public EvenAndOdd() {
}
public static void setThreadContext(){
threadLocal.set(3);
eventhreadLocal.set(2);
}
private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>();
private static ThreadLocal<Integer> eventhreadLocal = new ThreadLocal<Integer>();
@Override
public void run() {
System.out.println(threadLocal.get());
System.out.println(eventhreadLocal.get());
}
}
Run Code Online (Sandbox Code Playgroud)
// 现在是用于创建线程并调用 run 方法的类
public class PrintNumber {
public static void main(String[] args) {
EvenAndOdd evenAndOdd =new EvenAndOdd();
EvenAndOdd.setThreadContext();
Thread printThread = new Thread(evenAndOdd);
printThread.start();
}
}
Run Code Online (Sandbox Code Playgroud)
问题陈述 --- 线程的执行给了我 null 而不是 2 和 3