検索
日本語 | 検索 |
英語 | search |
ふりがな | けんさく |
フリガナ | ケンサク |
ある複数の対象の中からひとつを見つけ出すこと。
配列等の「複数のデータ」の中から、条件に一致するデータを見つけ出すこと。
基本的には「上から順に見ていく」ことになるが、「全て見る」ことを避けるためのアルゴリズムがいくつか存在する。
Javaでは、配列の検索はArraysクラスのbinarySearch()メソッドを使用する。
ただし、binarySearch()メソッドはバイナリサーチのアルゴリズムを使用し、このアルゴリズムの特性上「配列はソート済みである」必要がある。
また、データベースからの検索はSELECTによるクエリーを行う。
一見簡単そうな処理であるが、実は非常に悩みの種になりやすい処理でもある。
特に「データベースを検索する」「データ数が膨大」「ブラウザで表示する」場合に処理が非常に難しくなる。
まず、データベース検索を行う場合、データベースの設定等によって「大文字・小文字の違い」「エスケープシーケンス」「文字コード」等の問題により「見つかるはずのものが見つからない」場合が出てくる。また、検索条件を複雑にすると、SQLでは実現できず、全データを取り出してから検索するか、ストアドプロシージャ等を利用する必要が出てくる。
検索条件の問題はプログラム上で行うことで解決できるが、その場合、データ数が非常に多いと現実的に処理が不可能となる。特にインターネットからの検索の場合、待ち時間はせいぜい10秒であり、検索にそれ以上の時間が掛かる場合サービスとして意味を成さなくなる。
さらに、Webブラウザで表示する場合、表示領域やネットワークの通信量の問題から、データを小分けに送信する必要がある。この場合、「次を表示」等で再検索を行うことにより待ち時間が発生してしまうため、検索結果を一時的に保存する等の措置が必要となる。
検索機能は最も基本的な機能であり当然利用できる機能であり、そのため利用者の要望は厳しい。しかしその要望に答えられるだけの検索機能を実現するのは思いの外難しいことを肝に銘じておいた方がいいだろう。
配列等の「複数のデータ」の中から、条件に一致するデータを見つけ出すこと。
基本的には「上から順に見ていく」ことになるが、「全て見る」ことを避けるためのアルゴリズムがいくつか存在する。
Javaでは、配列の検索はArraysクラスのbinarySearch()メソッドを使用する。
ただし、binarySearch()メソッドはバイナリサーチのアルゴリズムを使用し、このアルゴリズムの特性上「配列はソート済みである」必要がある。
また、データベースからの検索はSELECTによるクエリーを行う。
一見簡単そうな処理であるが、実は非常に悩みの種になりやすい処理でもある。
特に「データベースを検索する」「データ数が膨大」「ブラウザで表示する」場合に処理が非常に難しくなる。
まず、データベース検索を行う場合、データベースの設定等によって「大文字・小文字の違い」「エスケープシーケンス」「文字コード」等の問題により「見つかるはずのものが見つからない」場合が出てくる。また、検索条件を複雑にすると、SQLでは実現できず、全データを取り出してから検索するか、ストアドプロシージャ等を利用する必要が出てくる。
検索条件の問題はプログラム上で行うことで解決できるが、その場合、データ数が非常に多いと現実的に処理が不可能となる。特にインターネットからの検索の場合、待ち時間はせいぜい10秒であり、検索にそれ以上の時間が掛かる場合サービスとして意味を成さなくなる。
さらに、Webブラウザで表示する場合、表示領域やネットワークの通信量の問題から、データを小分けに送信する必要がある。この場合、「次を表示」等で再検索を行うことにより待ち時間が発生してしまうため、検索結果を一時的に保存する等の措置が必要となる。
検索機能は最も基本的な機能であり当然利用できる機能であり、そのため利用者の要望は厳しい。しかしその要望に答えられるだけの検索機能を実現するのは思いの外難しいことを肝に銘じておいた方がいいだろう。
参考サイト
// Sample.java
import java.util.Arrays;
public class Sample
{
public static void main( String[] args )
{
// 検索対象の配列を作ります。
// 注:バイナリサーチの場合、検索対象がソートされている必要があります。
int[] ints = new int[]{ 100, 300, 500, 700, 900 };
// 検索します。
int result = Arrays.binarySearch( ints, 500 );
// 返されてくるのはインデックスナンバーです。
System.out.println( result );
// 2
System.out.println( ints[result] );
// 500
}
}
import java.util.Arrays;
public class Sample
{
public static void main( String[] args )
{
// 検索対象の配列を作ります。
// 注:バイナリサーチの場合、検索対象がソートされている必要があります。
int[] ints = new int[]{ 100, 300, 500, 700, 900 };
// 検索します。
int result = Arrays.binarySearch( ints, 500 );
// 返されてくるのはインデックスナンバーです。
System.out.println( result );
// 2
System.out.println( ints[result] );
// 500
}
}
// Sample.java import java.util.Arrays; public class Sample { public static void main( String[] args ) { // 検索対象の配列を作ります。 // 注:バイナリサーチの場合、検索対象がソートされている必要があります。 int[] ints = new int[]{ 100, 300, 500, 700, 900 }; // 検索します。 int result = Arrays.binarySearch( ints, 500 ); // 返されてくるのはインデックスナンバーです。 System.out.println( result ); // 2 System.out.println( ints[result] ); // 500 } }