我试图获取月份价值。但我想检查java.util或java.time中哪个更好,以检索月份值。这是我的代码,用于检查Calender vs ZonedDateTime的性能。
//import java.time.Instant;
//import java.time.ZonedDateTime;
//import java.util.Calendar;
Instant instant, instant2;
String diff;
instant = Instant.now();
int month2 = Calendar.getInstance().get(Calendar.MONTH) + 1;
instant2 = Instant.now();
diff = String.valueOf(instant2.getNano() - instant.getNano());
System.out.println("month value " + month2 + "at: " + diff);
instant = Instant.now();
int month1 = ZonedDateTime.now().getMonth().getValue();
instant2 = Instant.now();
diff = String.valueOf(instant2.getNano() - instant.getNano());
System.out.println("month value " + month1 + "at: " + diff);
Run Code Online (Sandbox Code Playgroud)
我认为java.time比java.util更好。因此,我期望ZonedDateTime比日历更好。但是在这里我发现了相反的情况。我的结果是:
month value 6at: 0 //Calendar
month value 6at: 9000000 //ZonedDateTime
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样。以及为什么我应该使用java.util.Calender而不是java.timeZonedDateTime的任何建议。
PS我什至把在month1之后的month2取回为:
Instant …Run Code Online (Sandbox Code Playgroud) 我OrderDTO在列表中有很多对象。
包含 2 个项目的示例:
final List<OrderDTO> orderList = new ArrayList<OrderDTO>();
final List<OrderDTO> orderList = new ArrayList<OrderDTO>();
final OrderDTO order1 = new OrderDTO("1", "100");
final OrderDTO order2 = new OrderDTO("2", "200");
orderList.add(order1);
orderList.add(order2);
Run Code Online (Sandbox Code Playgroud)
OrderDTO有字段,例如orderId和stateId。
我想在日志中显示:
"1", "2"
Run Code Online (Sandbox Code Playgroud)
或者
"100", "200"
Run Code Online (Sandbox Code Playgroud)
在 Java 11 中,迭代列表并显示每个对象的一个字段的值的最有效方法是什么?
import java.util.ArrayList;
import java.util.List;
public class IterationBenchmark {
public static void main(String args[]){
List<String> persons = new ArrayList<String>();
persons.add("AAA");
persons.add("BBB");
persons.add("CCC");
persons.add("DDD");
long timeMillis = System.currentTimeMillis();
for(String person : persons)
System.out.println(person);
System.out.println("Time taken for legacy for loop : "+
(System.currentTimeMillis() - timeMillis));
timeMillis = System.currentTimeMillis();
persons.stream().forEach(System.out::println);
System.out.println("Time taken for sequence stream : "+
(System.currentTimeMillis() - timeMillis));
timeMillis = System.currentTimeMillis();
persons.parallelStream().forEach(System.out::println);
System.out.println("Time taken for parallel stream : "+
(System.currentTimeMillis() - timeMillis));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
AAA
BBB
CCC
DDD
Time taken for …Run Code Online (Sandbox Code Playgroud) 我已经用 Golang 和 Java 测试了几个简单的函数。令我惊讶的是,Java 有时比 Golang 更快?尤其是在递归函数和标准库中的某些函数(例如 math/rand.Rand?)方面。我想知道为什么。这是我用于测试和结果的一些代码。
高朗代码:
package main
import (
"fmt"
"math/rand"
"time"
)
func calPi(pointCount int) float64 {
inCircleCount := 0
var x, y float64
var Pi float64
for i := 0; i < pointCount; i++ {
x = rand.Float64()
y = rand.Float64()
if x*x+y*y < 1 {
inCircleCount++
}
}
Pi = (4.0 * float64(inCircleCount)) / float64(pointCount)
return Pi
}
func fibonacci(c int64) int64 {
if c < 2 {
return c
}
return …Run Code Online (Sandbox Code Playgroud) 因此,我有2个程序执行相同的操作,一个用C编写,另一个用Java编写。它们都创建50个线程,并等待所有线程完成,然后终止。
为了了解两个程序之间的时间差,我在Linux中使用了“ time”命令来获取执行时间。
对于C程序,总执行时间为0.020秒,而Java版本花费了0.663秒来完成。
我曾尝试寻找答案,但发现的所有文章(如这 两篇文章)都说Java实际上比C快,我认为这是胡说八道,因此,如果有人可以为我澄清一下,我将不胜感激。 。
谢谢。
这就是C代码的样子。
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#define N 50
void* tproc(void *arg) {
printf("Thread %d\n", *((int *) arg));
return NULL;
}
int main(int argc, char * argv[]) {
int i;
int targ[N];
pthread_t tid[N];
for(i = 0; i < N; i++) {
targ[i] = i;
if(pthread_create(&(tid[i]), NULL, &tproc, &targ[i]) != 0) {
printf("Can't create thread %d\n", i);
return 1;
}
}
for(i = 0; i < N; i++) {
if(pthread_join(tid[i], NULL) != …Run Code Online (Sandbox Code Playgroud) 原始代码是:
public static int numberOfLeadingZeros(int i) {
// HD, Figure 5-6
if (i == 0)
return 32;
int n = 1;
if (i >>> 16 == 0) { n += 16; i <<= 16; }
if (i >>> 24 == 0) { n += 8; i <<= 8; }
if (i >>> 28 == 0) { n += 4; i <<= 4; }
if (i >>> 30 == 0) { n += 2; i <<= 2; }
n -= i …Run Code Online (Sandbox Code Playgroud) 我正在学习Go,在此之前我一直在使用Java8。我编写了两个程序来比较Java8和Go之间的执行速度。
Java程序运行了604秒,Go运行了2334.598334749秒。有人可以帮我理解为什么Go程序即使据说运行速度更快也运行缓慢。
? ~ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
? ~ go version
go version go1.12.4 darwin/amd64
Run Code Online (Sandbox Code Playgroud)
? ~ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
? ~ go version
go version go1.12.4 darwin/amd64
Run Code Online (Sandbox Code Playgroud)
//Java
public class Solution {
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i …Run Code Online (Sandbox Code Playgroud) 我使用时的性能list.parallelStream()比使用时差得多list.stream()。您认为为什么会发生这种情况?顺便说一句,这是Java 17,我的CPU 是桌面级的 i5。
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.chrono.ChronoPeriod;
import java.time.chrono.HijrahChronology;
import java.time.chrono.HijrahDate;
import java.time.chrono.IsoChronology;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class App {
public static void main(String[] args) throws Exception {
int size = 1;
List<Integer> list = null;
long startTimeN;
long endTimeN;
long startTimeP;
long endTimeP;
long normalStreamCheckedSize;
long normalStreamTime;
long parallelStreamCheckedSize;
long parallelStreamTime; …Run Code Online (Sandbox Code Playgroud) 在java数据类型(byte,short,int,float,double,boolean)中,这是编译和计算的最快数据类型以及为什么?请清楚地列出原因
java ×9
java-stream ×3
performance ×3
go ×2
c ×1
concurrency ×1
date ×1
for-loop ×1
foreach ×1
java-11 ×1
java-17 ×1
java-8 ×1
jvm ×1
jvm-hotspot ×1
openjdk ×1