アプリ版:「スタンプのみでお礼する」機能のリリースについて

import 文では

import java.util.*
としたり
import java.util.ArrayList
などのようにクラスごとに指定したりしますが、

この二つの違いとして
大抵の状況で
体感できるほどの速度の差なんてないですよね?
つまり、java.util.* としたからと言って、アプリケーションに影響を与えるほど速度が遅くなると言うことはないですよね。

A 回答 (3件)

例えば、ArrayListは、


import java.util.*
と書こうが、
import java.util.ArrayList
と書こうが、はたまたimportを書かず、いちいちすべてjava.util.ArrayListと書こうが、コンパイルしたクラスファイルの中ではみんなjava.util.ArrayListという形でクラス指定されているわけで、差は何もないと思う。
    • good
    • 0

実行速度は変わらないと思います。


むしろコンパイル時の速度が変わるんじゃないかと。

import java.applet.*;
import java.awt.color.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.dnd.peer.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.im.*;
import java.awt.im.spi.*;
import java.awt.image.*;
import java.awt.image.renderable.*;
import java.awt.peer.*;
import java.awt.print.*;
import java.beans.*;
import java.beans.beancontext.*;
import java.io.*;
import java.util.*;
import java.lang.*;

と無駄なインポートを多用したものときちんとインポート編成したjavaファイルを用意し、

public static void main(String[] args) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("javac", "インポートで*多用.java");
Process p = null;
long total = 0;
long start = 0;
for ( int i = 0 ; i < 100 ; i ++ ){
start = System.currentTimeMillis();
p = pb.start();
p.waitFor();
p.destroy();
total += System.currentTimeMillis() - start;
}
System.out.println("time:" + total + "ms");
pb = new ProcessBuilder("javac", "インポートで*使わない.java");
total = 0;
for ( int i = 0 ; i < 100 ; i ++ ){
start = System.currentTimeMillis();
p = pb.start();
p.waitFor();
p.destroy();
total += System.currentTimeMillis() - start;
}
System.out.println("time:" + total + "ms");
}

上記のようなコードにて100回コンパイルしたところ合計時間が1割程度変わりました。
大きなプロジェクト等で何千ものjavaファイルをビルドすることを考えるとやはり編成してあったほうがいいような気がします。

また、IDEの設定によっては警告があがって鬱陶しいこともあり、私はインポート編成推奨ですね。
    • good
    • 0

速度の差という点からは違いを感じたことはないです。


いくつかのパターンで実際に測定してみると納得できるかも?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!