小编Fri*_*jof的帖子

为什么System.nanoTime()比System.currentTimeMillis()更慢(在性能上)?

今天我做了一个快速的Benchmark来测试速度性能System.nanoTime()System.currentTimeMillis():

long startTime = System.nanoTime();

for(int i = 0; i < 1000000; i++) {
  long test = System.nanoTime();
}

long endTime = System.nanoTime();

System.out.println("Total time: "+(endTime-startTime));
Run Code Online (Sandbox Code Playgroud)

这是结果:

System.currentTimeMillis(): average of 12.7836022 / function call
System.nanoTime():          average of 34.6395674 / function call
Run Code Online (Sandbox Code Playgroud)

为什么跑步速度的差异如此之大?

基准系统:

Java 1.7.0_25
Windows 8 64-bit
CPU: AMD FX-6100
Run Code Online (Sandbox Code Playgroud)

java performance time

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

为什么Java的BigDecimal类没有被声明为final?

在检查Java BigDecimal类的源代码时,我很惊讶它没有被声明为final class:

类BigDecimal

public class BigDecimal
extends Number
implements Comparable<BigDecimal>
Run Code Online (Sandbox Code Playgroud)

不可变的,任意精度的带符号十进制数.

(来自Oracle Docs)

是否有特定原因或开发人员忘记添加该关键字?不将不可变类声明为final是不错的做法?

同样的情况也适用BigInteger,但不是String宣布为最终的.

java final immutability

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

为什么java.lang.Integer.valueOf是一个flyweight模式?

为什么java.lang.Integer.valueOf是一个flyweight模式?我试图找到原因,但未能.

java design-patterns

9
推荐指数
2
解决办法
3909
查看次数

泛型通配符"扩展"和"超级"

我正在开发一个需要将服务添加到组件的项目.该Service班是没有任何方法的接口.以下是我的服务如何工作的示例:

public interface Service { }

public interface CarWash extends Service {
  void washCar(Car car);
}

public interface CarRepair extends Service {
  void repairCar(Car car);
}
Run Code Online (Sandbox Code Playgroud)

现在有许多这些服务的实现.单个类可以实现多个服务,如此车库类:

public class Garage implements CarWash, CarRepair {
  @Override
  public void washCar(Car car) { /* .. */ }
  @Override
  public void repairCar(Car car) { /* .. */ }
}
Run Code Online (Sandbox Code Playgroud)

向组件添加服务时,我不希望将该服务用于所有任务,但是例如Garage仅用于清洗汽车(CarWash)而不是用于修复它们(CarRepair).因此我将任务指定为类,如下所示:

void addService(Service service, Class<? extends Service> task);
Run Code Online (Sandbox Code Playgroud)

为了检查服务是否可以实际执行任务,我使用了泛型:

<T extends Service> addService(T service, Class<? super T> …
Run Code Online (Sandbox Code Playgroud)

java generics wildcard

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

共享部分列表以避免复制

我正在寻找一种实现的数据结构List,允许我重用多个列表中出现的部分列表.

为了说明这一点,请考虑以下三个列表:

在此输入图像描述

如您所见,红色序列(42, 88, 76, 60)和蓝色序列(21, 9, 47)多次使用,每个序列表示作为其他列表的一部分共享的独立列表.实际上,列表可能会更长.

该列表只需要是只读的,因为它将用作返回值.创建列表集合的过程将是唯一一个(允许)修改列表(使用add(..)操作等).共享部分列表将使得使用addAll(..)(内部使用System.arraycopy(..))扩展复制列表元素变得多余.

有没有轻量级的List实现来满足我的需求?或者有一个相对简单的方法来自己实现一个?

java list shared-memory

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

样式表使用CSS作为ASCII艺术表

使用CSS,我想设置表格"ASCII艺术",如下所示:

+------+---------+----+
| Jill | Smith   | 50 |
+------+---------+----+
| Eve  | Jackson | 94 |
+------+---------+----+
| John | Doe     | 80 |
+------+---------+----+
Run Code Online (Sandbox Code Playgroud)
<table>
 <tr>
    <td>Jill</td>
    <td>Smith</td> 
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>94</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

有关这些表的更多信息,请查看此表生成器:将文本格式设置为表

如果可能的话,只使用CSS而不是硬编码任何边框字符会很酷.


我的尝试

我试过用border-image,但结果不是我想要的:

我的CSS:

* {
    font-family: "Ubuntu Mono";
    size: 10px;
    padding: 0;
    margin: 0;
}
table {
    border-spacing: 0;
    border-width: 8px;
    border-image: url("border.png") 16 8 round;
}
Run Code Online (Sandbox Code Playgroud)

border.png:

border.png

结果:

版本1

如您所见,不显示顶部和底部边框.此外,不显示单元格之间的行.

使用border-width: 16px:

版本2

现在,显示顶部和底部边框,但左边框和右边框是拉伸的. …

html css html-table css3 ascii-art

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

获取List中的特定元素的数量

我正在寻找一种快速方法来查找List一个特定元素的元素数量:

List<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
list.add("apple");
list.add("kiwi");

// I'm looking for a method as List.amountOf(Object obj):

list.amountOf("apple");     // should return 2
list.amountOf("kiwi");      // should return 1
list.amountOf("pear");      // should return 0
Run Code Online (Sandbox Code Playgroud)

java size list arraylist count

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

使用动画将div飞到另一个DOM位置

动画2个位置和大小之间的图像

我正在使用一个<img>元素(章鱼)从<div>上面的大灰色(#large)到<div>下面的小橙色(#small)

$(document).on("click", "#large > img", function() {
  $(this).appendTo("#small");
});
Run Code Online (Sandbox Code Playgroud)

这很好但我希望它能够平滑过渡并"飞行",因此它会慢慢插入其坐标和大小.

我尝试添加CSS转换

img { transition: all 3s; }
Run Code Online (Sandbox Code Playgroud)

对我来说<img>,但这不会起作用,因为图像被读取到DOM而不是被移动.

如何建立这样的动画?

JS小提琴

javascript css jquery animation css3

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

将泛型T转换为Class &lt;T&gt;

如何将泛型T转换为对象Class<T>

Class<T> T.classClass<T> T.getClass()不起作用的东西,因为T没有变量。

函数应如下所示:

public Class<T> getType() {
 return // Class of T
}
Run Code Online (Sandbox Code Playgroud)

背景信息:我有一些类Class1<T>Class2<T>...这一切extend ParentClass<T>ParentClass具有功能getType()。我正在寻找一种更优雅的方式来获取类型,然后仅创建变量Class<?> type并以这种方式保存类型。

java types casting class object

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

使用泛型时避免强制转换

在一个项目中,我有一个服务和一个使用该服务的类。在此示例中,车辆将使用维修服务。维修服务只能维修某种类型的车辆:车库只能维修汽车。我需要一种方法来通过适用的服务来修理车辆repairUsingService(..)

我的目标是拥有一个干净的Vehicle基类和干净的RepairService实现。我尝试了两种设计repair维修服务的方法:

  • repair(Vehicle<T> vehicle):这很丑陋,因为需要实现repair(Vehicle<Car> car),但很明显汽车是一种交通工具。
  • repairSimple(T vehicle):这很好,但Vehicle如果没有丑陋的演员阵容,就无法从班级中调用。

有没有办法避免强制转换但仍然只使用通用参数类型T(如repairSimple(T)

public class Vehicle<T extends Vehicle<T>> {

    public void repairUsingService(RepairService<T> obj) {
        obj.repair(this);
        obj.repairSimple((T) this);
    }
}

public class Car extends Vehicle<Car> {
}

public interface RepairService<T extends Vehicle<T>> {

    void repair(Vehicle<T> vehicle);

    void repairSimple(T vehicle);
}

public class Garage implements RepairService<Car> {
    @Override
    public void repair(Vehicle<Car> car) {
        System.out.println("Car repaired.");
    }

    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

java generics

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

Eclipse不允许从另一个工作区访问外部jar中的静态接口方法

  • 有两种蚀工作区,工作区甲工作区乙.
  • Workspace A中,有一个项目,其中包含一个定义公共静态方法的接口:

    package workspacea;
    
    public interface Foo {
    
      public static String sayHello() {
        return "Hello, world!";
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后,我使用Export→Java→JAR文件和默认设置将整个项目从Workspace A导出到*.jar-File.

  • Workspace B中,类应该访问先前定义的静态方法:

    package workspaceb;
    
    import workspacea.Foo;
    
    public class Bar {
    
      public static void test() {
        String msg = Foo.sayHello();
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用项目属性→Java构建路径→库→添加外部JAR,将以前从Workspace A导出的*.jar 添加到Java构建路径中...

执行这些步骤后,该行Foo.sayHello(); 不会编译:

Unresolved compilation problem: 
This static method of interface Foo can only be accessed as Foo.sayHello
Run Code Online (Sandbox Code Playgroud)

根据我的理解,它应该编译(它可以Foo很好地识别界面).有趣的是,如果两个项目都位于同一个工作区 …

java eclipse jar

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

获取等式的右侧

我正在调用该函数mnewton(0=expr, alpha, %pi/4)来获取一个相当复杂的方程的根expr

%(i1)   mnewton(0=expr, alpha, %pi/4)
%(o1)   [alpha=0.678193754078621]
Run Code Online (Sandbox Code Playgroud)

我需要对这个结果应用另一个函数(例如sin),然后想要绘制它。仅链接功能不起作用:

%(i2)   sin(mnewton(0=expr, alpha, %pi/4)[1])
%(o2)   sin(alpha=0.678193754078621)
Run Code Online (Sandbox Code Playgroud)

这是因为表达式alpha=0.678193754078621不是数字。我如何转换alpha=0.678193754078621为 just 0.678193754078621

我不能只是复制数值并手动添加它,因为我想绘制它,并且expr每个 y 都有不同的根。

equation function maxima

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

Eclipse:Java,没有找到主要方法

我最近把我的所有代码都手动导入到BlueJ的eclipse项目中,然后我开始使用设置"运行配置",最后认为我是免费的.然后我运行了代码,我收到了这个错误

java.lang.NoSuchMethodError: main
Exception in thread "main" 
Run Code Online (Sandbox Code Playgroud)

所以我想我必须添加一个主方法(我从来没有在BlueJ中这样做,为什么?).所以我这样做只是调用了构造函数方法(在BlueJ中我只是创建一个新对象,JFrame会显示).所以我这样做了,同样的错误.尝试不同的事情后(例如将构造函数中的代码移动到不同的方法等).我把它放在主要方法中:

public void main(String[] args)
{
    System.out.println("Hello, this is main why won't Java find this.");
}
Run Code Online (Sandbox Code Playgroud)

之后我仍然遇到了同样的错误,所以我决定将它添加到我的所有类中,以确保它没有使用另一个类作为主类.仍然是同样的错误,所以我想知道你是否有人遇到过这个问题.我也搜索了谷歌,我发现的所有问题都是private类等问题,而且感觉我所有的课程都是public(嘿,我来自Python :)).我知道那不是问题.请帮忙 :)

我的运行配置的图片

替代文字

这是我的主要方法代码

警告:长

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class AppFrame extends JFrame
{

    public String status = "Status:";// Status of Applet
    public int paint_count = 1;// Number of times applet has been painted
    public int[] mousePos = {-1, -1};// Stores Mouse's Last Clicked X and Y Cordinates
    public …
Run Code Online (Sandbox Code Playgroud)

java eclipse swing

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