我一直想知道,一般来说,在循环之前声明一个抛弃变量,而不是在循环内部重复,是否会产生任何(性能)差异?Java中的一个(毫无意义的)示例:
a)循环前的声明:
double intermediateResult;
for(int i=0; i < 1000; i++){
intermediateResult = i;
System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)
b)声明(重复)内循环:
for(int i=0; i < 1000; i++){
double intermediateResult = i;
System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)
哪一个更好,一个还是b?
我怀疑重复变量声明(例子b)在理论上会产生更多的开销,但是编译器足够聪明,所以它并不重要.实施例b具有更紧凑的优点,并且将变量的范围限制在其使用的位置.尽管如此,我倾向于根据示例来编码一个.
编辑:我对Java案件特别感兴趣.
我再也找不到IntelliJ IDEA 13中的Gradle工具窗口了.它被删除了吗?
此外,我无法在Gradle构建文件中运行任何Gradle任务(通过上下文菜单 - > Run).错误消息:Module XY is not backed by gradle发生.所有这些在IntelliJ IDEA 12中完美运行.
这里出了什么问题?
根据Java Concurrency in Practice,第11.4.3章说:
锁分裂有时可以扩展到一组变量独立对象的分区锁定,在这种情况下,它被称为锁定条带.例如,ConcurrentHashMap的实现使用一个包含16个锁的数组,每个锁保护1/16的散列桶; 铲斗N由锁定N mod 16保护.
我仍然有理解和可视化锁条纹和铲斗机制的问题.有人可以用很好理解的话来解释这个:)
提前致谢.
如果您有一个Array并且想要使用Java8 forEach()方法,那么哪种方法更好或更有效:
Arrays.asList(new String[]{"hallo","hi"}).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
要么
Arrays.stream(new String[]{"hallo","hi"}).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
差异是显着的还是有更好的解决方案来解决这个问题?
Lambda Expressions 的Java教程如下:
本节讨论Project Lambda中包含的功能,旨在通过向Java语言添加闭包和相关功能来支持多核环境中的编程.
我的问题是,根据多核系统和并发/并行编程,Lambda Expressions有哪些具体优势?
我不明白这两者之间的区别:
AtomicReference<Integer> atomicReference = new AtomicReference<>(1);
Run Code Online (Sandbox Code Playgroud)
与
AtomicInteger atomicInteger = new AtomicInteger(1);
Run Code Online (Sandbox Code Playgroud)
有人一般可以说何时使用AtomicReference?希望可以有人帮帮我.谢谢.
我有一个像这样实现的ProgressDialog:
// show progress dialog while date is loading
progressDialog = ProgressDialog.show(XYActivity.this, getResources().getString(R.string.progress_dialog_please_wait), getResources().getString(R.string.progress_dialog_loading), true);
progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
cancel(true);
Log.w(LOGTAG, "loading cancelled via back button");
}
});
progressDialog.setCancelable(true);
Run Code Online (Sandbox Code Playgroud)
此ProgressDialog在AsyncTask(PreExecute)中实现,因此cancel(true)方法停止AsyncTask.一切正常.
该问题是,我可以取消的ProgressDialog 与任何随机触摸我的屏幕上.我只想通过按下后退按钮来解除对话框.请帮我!感谢你们.
使用 ArrayList 我会做类似的事情
myList.set(myList.indexOf(oldItemNumber), newItemNumber);
Run Code Online (Sandbox Code Playgroud)
LinkedHashSet 有没有一种简单的方法可以实现这一点?
为什么在Authorization标头中使用Base64编码生成的"username:password"字符串文字?它的背景是什么?
我们的客户正在使用Oracle,我们希望使用MySQL进行开发.因此我们的MySQL Scheme必须与Oracle同步.我尝试使用Liquibase,但是在应用更改集时遇到问题,因为db特定的sql和不同的列类型,如NUMBER < - > BIGINT或VARCHAR < - > VARCHAR2
我使用这些工具错了吗?如何解决这类问题?
我正在尝试使用maven来管理我的依赖项并构建进程.我有一个问题是找到Google API依赖项或地图依赖项.这很好(没有map api):
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.0.1.2</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud) 谁可以解释我这个:
final AtomicReference<Integer> atomicReference = new AtomicReference<>(1);
atomicReference.set(2);
Run Code Online (Sandbox Code Playgroud)
在什么意义上最终使用?
请考虑以下代码段:
private List<User> getUsers() throws TasteException {
final int MAX_USERS = 100;
List<User> userList = new ArrayList<>(MAX_USERS);
dataModel.getUserIDs().forEachRemaining(userId -> {
if (userList.size() == 100) {
// stop
}
userList.add(new User(userId));
});
return userList;
}
Run Code Online (Sandbox Code Playgroud)
break或者return不在这里工作.我能做什么?
java ×8
java-8 ×3
android ×2
concurrency ×2
lambda ×2
back-button ×1
database ×1
dependencies ×1
dialog ×1
final ×1
google-maps ×1
gradle ×1
header ×1
http ×1
iterator ×1
java-stream ×1
liquibase ×1
loops ×1
mahout ×1
maven ×1
performance ×1
pom.xml ×1
progress ×1
variables ×1