Как я могу читать значения int из консоли более эффективно (из памяти), чем это:
BufferedReader in ...
number = Integer.parseInt(in.readLine());
Когда я использую readLine()
и анализирую его в int, java создает много объектов String и память. Я пытаюсь использовать Scanner
и метод nextInt()
, но этот подход также не так эффективен.
P.S Мне нужно прочитать> 1000_000 значений, и у меня есть ограничение памяти.
РЕДАКТИРОВАТЬ Полный код задачи
import java.io.*;
public class Duplicate {
public static void main(String[] args) throws IOException {
int last = 0;
boolean b = false;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(reader.readLine());
for (int i = 0; i < n; i++) {
int number =Integer.parseInt(reader.readLine());
if (number == 0 && !b) {
System.out.println(0);
b = true;
}
if (number == last) continue;
last = number;
System.out.print(last);
}
}
}
И переписать вариант:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
public class Duplicate {
public static void main(String[] args) throws IOException {
int last = 0;
boolean b = false;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int nextInt = getNextInt(reader);
for (int i = 0; i < nextInt; i++) {
int number = getNextInt(reader);
if (number == 0 && !b) {
System.out.println(0);
b = true;
}
if (number == last) continue;
b = true;
last = number;
System.out.println(last);
}
}
static int getNextInt(Reader in) throws IOException {
int c;
boolean negative = false;
do {
c = in.read();
if (!Character.isDigit(c)) {
negative = c == '-';
}
} while (c != -1 && !Character.isDigit(c));
if (c == -1) return Integer.MIN_VALUE;
int num = Character.getNumericValue(c);
while ((c = in.read()) != -1 && Character.isDigit(c)) {
num = 10 * num + Character.getNumericValue(c);
}
return negative ? -num : num;
}
}
Оба варианта не переходят из памяти (((
EDIT2 Я пытаюсь профилировать
i nt number = getRandom();
и начать с 1000000
еще раз запустил то же самое
и всплеск GC