小编Epa*_*aga的帖子

性能问题:将十六进制char转换为Java中的数字值的最快方法?

我想从表示十六进制值(大写或小写)的字符转换为字节,如

'0'->0, '1' -> 1, 'A' -> 10, 'a' -> 10, 'f' -> 15 etc...
Run Code Online (Sandbox Code Playgroud)

我会经常调用这种方法,所以性能很重要.有没有比使用预先初始化HashMap<Character,Byte>从中获取值更快的方法?

回答

看起来这是使用switch-case和Jon Skeet的直接计算解决方案之间的一个折腾 - 尽管如此,交换机案例解决方案似乎有点微不足道.Greg的阵列方法胜出.以下是各种方法的200,000,000次运行的性能结果(以ms为单位):

Character.getNumericValue:
8360

Character.digit:
8453

HashMap<Character,Byte>:
15109

Greg's Array Method:
6656

JonSkeet's Direct Method:
7344

Switch:
7281
Run Code Online (Sandbox Code Playgroud)

多谢你们!

基准方法代码

你好,JonSkeet,你是​​老竞争对手.;-)

public class ScratchPad {

    private static final int NUMBER_OF_RUNS = 200000000;

    static byte res;

    static HashMap<Character, Byte> map = new HashMap<Character, Byte>() {{
        put( Character.valueOf( '0' ), Byte.valueOf( (byte )0 ));
        put( Character.valueOf( '1' ), Byte.valueOf( …
Run Code Online (Sandbox Code Playgroud)

java algorithm performance

9
推荐指数
3
解决办法
6300
查看次数

当内存不足时自动警告我的Java应用程序有什么好方法?

当可用内存达到某个阈值时,是否有一种优雅的方法可以自动向我的Java应用程序发出内存警告?

请注意,这是一个Jeopardy风格的问题,我已经有了答案,只是想在这里发布以供世界发现,因为解决方案帮助了我一堆.

java memory jvm memory-warning

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

最优雅的方法来检测String是否是一个数字?

是否有更好,更优雅(和/或可能更快)的方式

boolean isNumber = false;
try{
   Double.valueOf(myNumber);
   isNumber = true;
} catch (NumberFormatException e) {
}
Run Code Online (Sandbox Code Playgroud)

...?


编辑:因为我不能选择两个答案我正在使用正则表达式,因为a)它优雅而且b)说"Jon Skeet解决了问题"是一个重言式,因为Jon Skeet本身就是所有问题的解决方案.

java string parsing numbers

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

Java中最好的XML处理类

哪个是Java中用于处理XML文档的最佳类?

java xml

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

Android:如何在TextView中确定触摸事件位置的字符索引?

我有一个TextViewOnTouchListener.我想要的是当我得到时用户指向的字符索引MotionEvent.有没有办法获得的基础字体指标TextView

android textview ontouchlistener fontmetrics

8
推荐指数
3
解决办法
4189
查看次数

如何知道当前是否正在关机?

在Tomcat中,当服务器关闭时,它会尝试将它知道的类中的所有静态变量设置为null.通过触摸这些类,它们的静态初始化器运行,这可能导致我们的一些具有大量静态初始化器的遗留类的无限循环.

是否有一种优雅的方法来检测当前是否正在关闭?然后我们可以在静态初始化器的顶部检查我们是否处于关闭模式,然后忽略初始化.

我们找到的唯一可行的方法就是优雅:

    try{
       Thread hook = new Thread();
       Runtime.getRuntime().addShutdownHook( hook ); // fires "java.lang.IllegalStateException: Shutdown in progress" if currently in shutdown
       Runtime.getRuntime().removeShutdownHook( hook );
    }catch(Throwable th){
       throw new Error("Init in shutdown thread", th );
    }
Run Code Online (Sandbox Code Playgroud)

java tomcat shutdown

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

致命错误C1083 - 无法打开包含文件:"windows.h":没有这样的文件或目录

我正在尝试构建IKVM(请参阅此问题),但现在遇到了与IKVM无关的问题,因此我打开了一个新问题:

使用Visual Studio 2008命令提示符(从"开始"菜单)在IKVM目录上运行nant时,出现以下错误:

        ikvm-native-win32:

               [cl] Compiling 2 files to C:\ikvm-0.36.0.11\native\Release'.

               [cl] jni.c
               [cl] os.c
               [cl] C:\ikvm-0.36.0.11\native\os.c(25) : fatal error C1083: Cannot open include file: 'windows.h': No such
                    file or directory
               [cl] Generating Code...

        BUILD FAILED

        C:\ikvm-0.36.0.11\native\native.build(17,10):
        External Program Failed: cl (return code was 2)
Run Code Online (Sandbox Code Playgroud)

我安装了Platform SDK.我错过了什么?我确定这很简单......

编辑#1我刚刚检查过 - 我在路径上有包含windows.h的目录. 编辑#2找到答案(参见下面的答案):包含windows.h的目录需要在"Include"路径变量中.

.net c# ikvm path

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

与C#中的JUnit相同的是什么?

我来自Java,目前正在开发一个C#项目.建议的方法是:a)单元测试现有的C#代码和b)为C#开发完成TDD?

对于Visual Studio和C#代码,还有相当于EMMA/EclEmma(免费但功能强大的代码覆盖工具)吗?

c# junit unit-testing

7
推荐指数
3
解决办法
2万
查看次数

使用JMockit在抽象类中模拟非公共静态方法?

我有以下课程:

public abstract class AbstractParent {
    static String method() {
        return "OriginalOutput";
    }
}
Run Code Online (Sandbox Code Playgroud)

我想嘲笑这个方法.我决定使用JMockit.所以我创建了一个模拟类:

public class MockParent {
    static String method() {
        return "MOCK";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的测试代码如下所示:

public class RealParentTest {

    @Before
    public void setUp() throws Exception {
        Mockit.redefineMethods( AbstractParent.class, MockParent.class );
    }


    @Test
    public void testMethod() {
        assertEquals(MockParent.method(),AbstractParent.method());
    }

}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个测试表明AbstractParent返回"OriginalOutput"而不是"MOCK".有什么想法吗?难道我做错了什么?我已经尝试将我的模拟类声明为抽象,但无济于事.

编辑注意,使方法公开会导致测试运行没有问题...这很奇怪,因为使用JMockit,您应该能够模拟任何范围的方法.

回答只有mock方法需要公开,你可以保留原来的方法.

java unit-testing jmockit mocking

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

为什么在编辑JTable单元格时按下escape时未调用cancelCellEditing()?

我有一个可编辑的JTable,并设置了一个DefaultCellEditor,如下所示:

    colModel.getColumn( 1 ).setCellEditor( new DefaultCellEditor( txtEditBox ) {
        // ...
        @Override
        public void cancelCellEditing() {
            super.cancelCellEditing();
            // handling the event
        }
        // ...
    }
Run Code Online (Sandbox Code Playgroud)

但是,在编辑此列中的单元格时按下escape时,虽然编辑模式已完成,但不会调用此方法.有什么想法吗?难道我做错了什么?有没有办法处理这个(除了手动添加KeyListener)?

java jtable tablecelleditor

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