2

ロジックの小さな部分を確認する必要があります。誰かが貴重な情報を提供してくれれば幸いです。

ロジックをチェックするには 2 つの方法があり、どちらがより効率的かを知りたいと考えています。

最初の方法:

if(url.equalsIgnoreCase("1")){
    url = "aaa";
}
else if(url.equalsIgnoreCase("2")){
    url = "bbb";
}
else if(url.equalsIgnoreCase("3")){
    url = "ccc";
}
else if(url.equalsIgnoreCase("4")){
    url = "ddd";
}
else if(url.equalsIgnoreCase("5")){
    url = "eee";
}
else if(url.equalsIgnoreCase("6")){
    url = "fff";
}

2 番目の方法:

int temp = Integer.parseInt(url);
switch (temp) {
case 1:
    url = "aaa";
    break;
case 2:
    url = "bbb";
    break;
case 3:
    url = "ccc";
    break;
case 4:
    url = "ddd";
    break;
case 5:
    url = "eee";
    break;
case 6:
    url = "fff";
    break;
}

どちらが効率的か教えてください。使い方が悪いInteger.parseInt(string)

4

12 に答える 12

14

どちらが効率的か教えてください。

あなたのケースでは、switchステートメントの方が効率的です

Integer.parseInt(string) を使用するのは悪いことですか?

大丈夫です。ただし、java7 を使用している場合は、switch ケースで String-constants 値を使用できますが、Android では使用できません。

効率は別として、ほとんどの場合、スイッチはよりきれいに見えます。

于 2013-09-06T08:19:26.567 に答える
4

効率に関しては、これを確認してください: Case vs If Else If: どちらがより効率的ですか? 、しかし方法 2 はよりクリーンで読みやすいコードのように見えます。

于 2013-09-06T08:19:36.527 に答える
3

原則として、switchステートメントはより効率的なbytecode. with Java 7、switch ステートメント withStringが導入されたので、キャストする必要はありません。

于 2013-09-06T08:18:39.717 に答える
3

この場合、switchより効率的です。

実際、Java7 を使用している場合は、Integer.parseInt().

于 2013-09-06T08:22:34.257 に答える
2

読みやすさとデバッグのしやすさ (それは一言でしょうか?) はかなり主観的なものですが、一部の人々 (私を含む) は、switchステートメントがより明確であると感じています。ただし、多くの場合、コンストラクトを使用するよりも高速なコードをコンパイラが生成する可能性がswitch高くなります。if else

于 2013-09-06T08:27:30.887 に答える
2

次の 2 つの理由により、switch ステートメントの方が高速です。

  1. 通常、switch ステートメントは、制御がそれぞれのケースに直接転送されるため、if-else-if 構造よりも高速です。一方、if-else-if の場合は、最初の一致条件に到達するためにすべてのチェックが実行されます。たとえばtemp = 6、switch ステートメントを割り当てると、それぞれのブロックが直接実行されます。if-else-if コンストラクトは、すべての条件を反復処理します。

  2. の呼び出しはequalsIgnoreCase()、ケース マッチングのバックグラウンドで発生する等価性チェックを実行するよりもコストがかかります。

于 2013-09-06T08:28:55.977 に答える
1

別のアプローチは、事前に初期化されたマップを使用することだと思います。(文字列) の数字をキーとして、URL の結果を値として持つ必要があります。次に、簡単に行うことができます

url = map.get(Integer.parseInt(url));

これはおそらく、長い switch ステートメントよりもはるかにクリーンなバージョンです。

于 2013-09-06T08:27:32.477 に答える
1

このような長いリストは、switch間違いなくより良い選択です。ジャンクションが長いほど、比較してスイッチを遮断する方が良い場合

于 2013-09-06T08:20:49.580 に答える
1

switch は if else よりも多くの機能を備えています。

詳細については、http: //docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.htmlを参照してください。

class SwitchDemo2 {
    public static void main(String[] args) {

        int month = 2;
        int year = 2000;
        int numDays = 0;

        switch (month) {
            case 1: case 3: case 5:
            case 7: case 8: case 10:
            case 12:
                numDays = 31;
                break;
            case 4: case 6:
            case 9: case 11:
                numDays = 30;
                break;
            case 2:
                if (((year % 4 == 0) && 
                     !(year % 100 == 0))
                     || (year % 400 == 0))
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                System.out.println("Invalid month.");
                break;
        }
        System.out.println("Number of Days = "
                           + numDays);
    }
}

出力します

Number of Days = 29

したがって、どちらを使用するかは、実装要件にも依存します。

于 2013-09-06T08:28:30.547 に答える