JListでプレフィックス検索を行うためのJavaコードがいくつか出てきました。しかし、それを見ると、キーイングごとにリストをリニアに検索し、タイトなループ内でスローケース変換を実行すると、アルゴリズムの難しさは非常に非効率的です。JList検索の効率
非常に大量のデータでは、カスタム実装の3値検索ツリーがはるかに効率的なソリューションになると思います。しかし、単純なコードを求めていて、そのような複雑さを必要とする性能要件がない場合、このアルゴリズムはかなりの量の追加コードを必要とせずに改善することができるより単純な方法がありますか?クイックチェンジのために
for (int i=0; i < jList1.getModel().getSize(); i++) {
String str = ((String)jList1.getModel().getElementAt(i)).toLowerCase();
if (str.startsWith(m_key)) {
jList1.setSelectedIndex(i);
jList1.ensureIndexIsVisible(i);
break;
}
}
パフォーマンスの問題が発生したと測定しましたか? JListsには通常、ほんのわずかの要素しか含まれていません(それ以外の場合は使用できません)。また、コンピュータは毎秒数十億命令を実行します。 GUIは、ユーザイベントを待つのにほとんどの時間を費やします。途中で最適化しないでください。このコードはシンプルで簡単に保守可能で、恐らく害はありません。 –
JB Nizet:時期尚早の最適化について懸念しているのは、まさにデータ構造全体を実装してテストしても、それを最適化するのは苦労したくないからです。しかし、コードをシンプルで保守しやすい状態に保ったまま他の変更を加えることができれば、私はより良いコードと、効率と単純さのバランスについて考えてみようとしています。 –
これをどのように使用するか質問できますか?何らかの自動補完アルゴリズムを作成すると、Bツリーの辞書を使っていくつかの素晴らしいパフォーマンスが得られるからです。しかし、それはグラフィカルな表現には役に立たず、それよりはるかに複雑です。ちなみに、あなたのリストがソートされていれば、コードをeaslyに最適化することができます。 – AxFab