小编Rae*_*ald的帖子

在equals()中使用缓存的hashCode()值

对于不可变类String; String :: hashCode计算只会在该对象的生命周期中发生一次.所以hashCode()第一次打电话后总是回来private int hash.计算时不会浪费CPU.

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {    // **h != 0 in second time**
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}
Run Code Online (Sandbox Code Playgroud)

我们知道hashcode和equals之间的契约

equal objects must produce the same hash code

所以我相信下面的代码将改善字符串equals()的性能.这在hashmap中可能是多余的,因为hashmap已经基于哈希码获得了桶,但是这在BIG List搜索上具有良好的性能改进.

//Does the below …
Run Code Online (Sandbox Code Playgroud)

java hash equals

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

如何将日期差异作为具有毫秒精度的浮点数

public static void main(String[] args) throws InterruptedException{
    long sTime =  new Date().getTime();
    Thread.sleep(3234);
    long eTime =  new Date().getTime();
    float diff = ((eTime-sTime)/1000);
    System.out.println(diff);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我期望输出为3.234,但它是3.0.我想要两秒之间的精确差异,只有一小部分.

java date date-difference

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

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

如何测试junit中是否抛出并捕获异常

我需要测试以下代码:

try{
   while((testBean = csvReader.read(TestBean.class,headers,getCellProcessors()))!=null){
      System.out.println("no excpetion");
      i=5;
   }
}catch(SuperCsvException csvExc){
   System.out.println("superCSV excpetion");
   i=0;
}catch(Exception ex){
   System.out.println("excpetion");
   i=0;
}
Run Code Online (Sandbox Code Playgroud)

如何测试是否SuperCsvException被抛出和被捕获。

java junit

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

从文件中读取对象和数据时,Java如何知道对象和数据的类型

嗨,我是Java和学习的新手,我在这里搜索了这个问题的答案并用Google搜索,查看了Java Doc,但似乎无法找到关于这个主题的明确解释.

在包装流和Serializable对象时,将对象,数据,基元的混合写入文件,然后再次读回它们,必须以与写入时相同的顺序读回数据,对象,基元.如果类型或错误序列不匹配,则会出现EOFException.

在回读文件时,Java如何知道对象和数据的类型?我只能断定这是存储在文件中,还是FileDescriptor?但是在Java文档中没有任何相关内容?还是有吗?

编辑:我已经测试了这个(Java 8),如果我的序列错误,我会得到一个EOFException,并且我在读取文件时就得到了Exception.

编辑2:对不起,我没有发布代码,有点丢失它,因为我做了很多不同的流写入和读取,并在开始读取文件,纠正类型错误带走了异常的几种情况下得到了EOFException.代码如下,不得不从内存中重新创建.

try (DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)))) {

        for (int i = 0; i < prices.length; i++) {
            dataOut.writeDouble(prices[i]);
            dataOut.write(numbers[i]);
            dataOut.writeUTF(desc[i]);
        }

 try (DataInputStream dataIn = new DataInputStream(new BufferedInputStream(
            new FileInputStream(dataFile)));) {
        double price;
        int number;
        String description;
        int c = 0;
        while (true) {
            price = dataIn.readDouble();
            number = dataIn.readInt();
            description = dataIn.readUTF();
            System.out.println(price + " " + number + " " + description);
Run Code Online (Sandbox Code Playgroud)

我省略了一些代码,但核心元素在那里,所以readInt方法产生一个EOFException,(使用的是write方法,而不是writeInt).如果我更正错误(更改为writeInt)一切正常.但是,如果我在读取时在价格和数字之间交换位置没有错误并打印出垃圾,但仍然正常完成.

while (true) {
            description = dataIn.readUTF(); …
Run Code Online (Sandbox Code Playgroud)

java input

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

为什么不在变量中存储'new'的结果

我被告知new关键字创建一个类的实例,并返回一个存储在内存中的对象,并分配给类类型的变量.如果粗体语句为真,为什么下面的陈述不正确?

new Class(); 
Run Code Online (Sandbox Code Playgroud)

因为没有赋给类new的变量,而返回变量?

java new-operator

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

由于未指定ObjectWarpper,因此不会加载自定义EL函数

我的Web应用程序使用Spring MVC和Freemarker.当它在启动后必须首先呈现网页(使用Freemarker 2.3.22)时,它会记录一条警告消息:

 Custom EL functions won't be loaded because no ObjectWarpper was specified
Run Code Online (Sandbox Code Playgroud)

(是的,ObjectWarpper错误信息有拼写错误)

不过,我觉得我了一个ObjectWrapper在我的配置Bean规定:

 <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/views/" />
    <property name="freemarkerSettings">
       <props>
          <prop key="url_escaping_charset">UTF-8</prop>
          <prop key="object_wrapper">DefaultObjectWrapper(2.3.22)</prop>
       </props>
    </property>
 </bean>
Run Code Online (Sandbox Code Playgroud)

那么我该怎样做才能正确设置ObjectWrapper并防止记录此警告消息?

如果我使用的话,我也有同样的问题default object_wrapper.

freemarker spring-mvc

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

匿名类的构造函数调用是否具有参数

public static void main(String[] args) {
    Thread myThread = new Thread("YOYO") {
        public void run() {
            Thread t = Thread.currentThread();
            System.out.println(t.getName());
        }
    };

    myThread.start();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释线程类构造函数的调用旁边的花括号代码块是什么类型的功能new Thread("YOYO")?据我所知,它不应该是匿名类,因为如果它是匿名类,旁边的括号Thread应该是空的()而不是("YOYO")

java constructor

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

对于小的编译时间常数,"整数太大"

我有这个:

switch (account){
    case 08120:
        // Savings deposit interest rate
        return null;                
    case 13100:
        // Receivables contractual interest
        return null;                
    case 16550:
       // Default management process accounts payable
       return null;                                
}
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨整数08120太大了!

到底是怎么回事?

java integer

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

在不使用CQL的情况下,通过密钥在Cassandra中获取一行

我曾与其他NoSQL数据库合作,这些数据库支持主键的"获取"概念,而不是"选择".

"获取"的优点是没有SQL/CQL/OQL /解析或处理的任何东西,因此速度要快得多.

在Cassandra API中是否有类似的东西,我可以通过主键"获取"整行,而Cassandra不必解析CQL?(或者CQL解析如此简单和快速,以至于它没有产生可测量的差异?)

cassandra

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