• ベストアンサー

import 文

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

noname#101202
noname#101202
  • Java
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.3

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

その他の回答 (2)

回答No.2

実行速度は変わらないと思います。 むしろコンパイル時の速度が変わるんじゃないかと。 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の設定によっては警告があがって鬱陶しいこともあり、私はインポート編成推奨ですね。

noname#241087
noname#241087
回答No.1

速度の差という点からは違いを感じたことはないです。 いくつかのパターンで実際に測定してみると納得できるかも?

関連するQ&A

  • import文はルートクラス指定とサブクラス指定では処理・モジュールサイズに影響?

    ■質問1: import文はルートクラス指定とサブクラス指定では処理・モジュールサイズに影響するのでしょうか? 例えば、 (A)import java.util.Date; と (B)import java.util.*; では、何かしらの変化があるのでしょうか? import文はコンパイル時のクラスライブラリへの参照、という意味では コンパイル速度への影響は考えられますが、実処理へは、、、どうなのでしょうか? またこのことによるモジュールサイズには影響がおこりえますか? (import文一行では変化がないかもしれませんが、大量の場合) ご存知なかたいらっしゃいましたら、是非教えて頂けますようよろしくお願いいたします。

    • ベストアンサー
    • Java
  • import文の必要性

    Javaを勉強しているものです。 import文について質問させてください。 教材に、「java.langパッケージ以外のパッケージを利用する場合は、必ずimport文が必要です。」と記載されていました。 しかし、パッケージ名を含めたクラスのフルパスを記述すればimport文は、langパッケージに限らず、すべて不要なのではないのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • *でimportするのと、クラス名まできちんと指定するのと

    Javaの開発経験は2年くらいですが、未だに疑問でした。 例えばVectorクラスを使いたいとき import java.util.Vectorとする人もいれば、 import java.util.* としてしまう人もいますよね。 前者の人は使うクラスが増えるたびに、丁寧にクラス名でインポートします。*は一切使いません。 やっぱりこの方がメモリを食わない、等の理由でよいのでしょうか?特に最近、こういうソースを良く見かけます。

    • ベストアンサー
    • Java
  • ArrayListのパッケージがlistでない理由

    ・パッケージについて教えてください ■質問1 ・ArrayListのパッケージは、どうして「java.util.List」ではなくて「java.util.ArrayList」なのでしょうか? ・ArrayListは、Listインターフェイス実装クラスなのでListに紐付いている、と思ったのですが… ・「java/util/List.interface」と「java/util/ArrayList.class」は並列の位置づけになるのでしょうか? ・そういう決まりだから? ・Listインターフェイスのパッケージ名は下記で確認するのでしょうか? ・http://docs.oracle.com/javase/jp/7/api/java/util/List.html ■質問2 ・「import java.util.*;」表記ができるなら、全部これで良いようにも思うのですが、どういう風に使い分けるのでしょうか? ・普通はどちらを使う、とかあるのでしょうか?

    • ベストアンサー
    • Java
  • java import文のエラー

    javaのソースで、パッケージをimportして使用するための簡単なサンプルを作成しました。 import文でクラス名まで指定すれば問題ないのですが、*を利用するとコンパイルエラーとなってしまいます。 コンパイル時にクラスパスを指定するのかと思って試してみましたが、やはりエラーでした。 回避方法をご存知の方いらっしゃいましたら、教えていただけますでしょうか。 なお、java/javacは、1.5.0_14を使用しています。 ■ソースコード(1) <C:\Work\Test\PackTest.java> package Test; public class PackTest{   public static void methodA(){     System.out.println("パッケージ成功");   } } ■ソースコード(2) <C:\Work\UsePack.java> import Test.*;     //import Test.PackTest; なら成功 class UsePack{   public static void main(String args[]){     PackTest.methodA();   } } ■エラー例(1) >javac -d . PackTest.java (これは成功) >javac UsePack.java   UsePack.java:5: PackTest にアクセスできません。   クラスファイル .\PackTest.java は不正です。   ファイルにクラス PackTest が含まれていません。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。     PackTest.methodA(); ■エラー例(2) >javac -d . PackTest.java (これは成功) >javac -classpath C:\Work\Test UsePack.java   UsePack.java:1: パッケージ Test は存在しません。   import Test.*;   ^   UsePack.java:5: PackTest にアクセスできません。   クラスファイル C:\Work\Test\PackTest.class は不正です。   クラスファイル Test.PackTest に不正なクラスがあります。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。      PackTest.methodA();      ^

  • コレクションクラスについて

    ●下記のコードについて質問があります import java.util.*; public class Test { public static void main(String args[]) { ArrayList<ObjectOne> list = new ArrayList<ObjectOne>(); list.add(new ObjectOne()); list.add(new ObjectOne()); list.add(new ObjectOne()); Collections.sort(list); } } class ObjectOne { private int x = 0; private int y = 0; } このソースをコンパイルすると、 シンボル: メソッド sort(java.util.ArrayList<ObjectOne>) 場所 : java.util.Collections の クラス Collections.sort(list); と、エラーが表示されてしまいます。 java.util.*をインポートしているので、上記のようなエラーはでないと 思うのですが、うまくいかないです。おそらく、ObjectOneクラスで 何か処理漏れが起きているのかもしれませんが、エラーとなる原因を 特定することができません。 エラーとなる原因と解消する手立てを教えていただければと思っております。 宜しくお願い致します。 「追記」 ArrayList<ObjectOne> list = new ArrayList<ObjectOne>(); の<ObjectOne>を消せばエラーはなくなりますが、 <ObjectOne>を消さない方針で考えがあればと思っております。

  • リフレクションでフィールドに値を設定

    リフレクションで取得したクラスの一覧の各クラスのString型のフィールドにだけ 任意の値を設定するサンプルを下記のように作成しました。 このプログラムの流れの中でString型のフィールドに任意の値を設定するには どのように書けばよいでしょうか。 調べてみるとFieldクラスのsetメソッドを使用するようですが下記サンプルの中で 第一引数には何を渡せばよいかがわからないです。 【サンプル】 ※最初のgetClasses()で指定パッケージ配下のクラスは取得できています。 import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; public class ReflectionTest { public static void main(String[] args) { List<Class<?>> classes; try { // 指定したパッケージ配下のクラスを取得 classes = getClasses("test"); for (Class<?> class1 : classes) { Field[] fields = class1.getDeclaredFields(); for(Field field : fields) { field.set(????, "任意の文字列"); // 第一引数に何を渡せばよい?? System.out.println(field.getType().getName()); } } } catch (ClassNotFoundException | IOException | URISyntaxException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • ArrayList でスタックを

    初歩的でツマラナイかもしれません。 import java.util.ArrayList; でスタックを実現するクラス"MyStack"を書きました。 フィールドは private ArrayList<Integer> stack = new ArrayList<Integer>(); のみという条件です。 MyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MyStack {   private ArrayList<Integer> stack = new ArrayList<Integer>();      // データを先頭に追加   public void push( int item ) {     stack.add( item );   }   // 先頭のデータを取り出す   public int pop( ) {     int rtn;     if( stack.isEmpty() ) {       System.out.println( "スタックは空です." );       System.exit( 1 );     }          rtn = stack.get( 0 );     stack.remove( 0 );     return rtn;   } } このMyStackを実行するクラス"MainForMyStack"を書きます。 実行結果は、標準出力に 43210 と出ることを想定しています。 MainForMyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MainForMyStack {   public static void main(String[] args) {     MyStack stack = new MyStack();     // 0,1,2,3,4 をスタックに追加     for( int i=0; i < 5; i++ ) {       stack.push( i );     }     // スタックのデータを先頭から取り出す     for( int i=0; i < stack.size(); i++ ) {       System.out.print( stack.pop() );     }   } } さて、MainForMyStack.java の i < stack.size(); の箇所でエラーが出るのはなぜでしょう? どなたかご教授の方お願いします。

    • ベストアンサー
    • Java
  • importエラー

    JAVAサーブレットでjavax.servletとjavax.servlet.httpをimportすると自分で用意したクラスをimportすることができなくなります。 参考にしている書籍と見比べて違いがないと思いますが。 ちなみに、上記の二つをimportしなければ、 問題無くimportされます。 よろしくおねがいします。

    • ベストアンサー
    • Java
  • import と extends について

    ちょっとした疑問なんですが、 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class test extends HttpServlet{ HttpServletクラスを継承していて、 上ではjavax.servlet.http.*;をインポートしていますが、HttpServletクラスは、javax.servlet.http.HttpServletですよね? importでクラスを使うのと、extendsでクラスを扱うのとはどう違うのでしょうか? その違いがわかなくてどうも納得いきません。 どなたか教えていただけないでしょうか? よろしくお願い致します。

専門家に質問してみよう