今天我做了一个快速的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 BigDecimal类的源代码时,我很惊讶它没有被声明为final class:
类BigDecimal
Run Code Online (Sandbox Code Playgroud)public class BigDecimal extends Number implements Comparable<BigDecimal>不可变的,任意精度的带符号十进制数.
(来自Oracle Docs)
是否有特定原因或开发人员忘记添加该关键字?不将不可变类声明为final是不错的做法?
同样的情况也适用BigInteger,但不是String宣布为最终的.
为什么java.lang.Integer.valueOf是一个flyweight模式?我试图找到原因,但未能.
我正在开发一个需要将服务添加到组件的项目.该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) 我正在寻找一种实现的数据结构List,允许我重用多个列表中出现的部分列表.
为了说明这一点,请考虑以下三个列表:
如您所见,红色序列(42, 88, 76, 60)和蓝色序列(21, 9, 47)多次使用,每个序列表示作为其他列表的一部分共享的独立列表.实际上,列表可能会更长.
该列表只需要是只读的,因为它将用作返回值.创建列表集合的过程将是唯一一个(允许)修改列表(使用add(..)操作等).共享部分列表将使得使用addAll(..)(内部使用System.arraycopy(..))扩展复制列表元素变得多余.
有没有轻量级的List实现来满足我的需求?或者有一个相对简单的方法来自己实现一个?
使用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-width: 16px:

现在,显示顶部和底部边框,但左边框和右边框是拉伸的. …
我正在寻找一种快速方法来查找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) 我正在使用一个<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而不是被移动.
如何建立这样的动画?
如何将泛型T转换为对象Class<T>?
像Class<T> T.class或Class<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并以这种方式保存类型。
在一个项目中,我有一个服务和一个使用该服务的类。在此示例中,车辆将使用维修服务。维修服务只能维修某种类型的车辆:车库只能维修汽车。我需要一种方法来通过适用的服务来修理车辆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) 在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很好地识别界面).有趣的是,如果两个项目都位于同一个工作区 …
我正在调用该函数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 都有不同的根。
我最近把我的所有代码都手动导入到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 ×10
css ×2
css3 ×2
eclipse ×2
generics ×2
list ×2
animation ×1
arraylist ×1
ascii-art ×1
casting ×1
class ×1
count ×1
equation ×1
final ×1
function ×1
html ×1
html-table ×1
immutability ×1
jar ×1
javascript ×1
jquery ×1
maxima ×1
object ×1
performance ×1
size ×1
swing ×1
time ×1
types ×1
wildcard ×1