オブジェクトに順序を付けることができる場合は、順序によってペアを確認するだけで済みますa < b
。配列内のインデックス、ポインター(ポインター値へのアクセスを許可する言語の場合はそうです)。
for(Object a : list) {
for(Object b : list) {
if (a.compare(b) < 0) {
非常にシンプルで、実際に問題を解決します。
整数のインデックス付きストレージがある場合は、次のことができます。
for(int i = 0; i < list.length; i++) {
for(int j = i + 1; j < list.length; j++) {
重複することはありません。これはArrayList
、任意のタイプでは機能しますが、おそらく機能しません。いくつかのイテレータのクローンを作成できるかもしれませんが、私はそれには賭けません...
for(Iterator<Object> iter = list.iterator(); iter.hasNext(); ) {
Object a = iter.next();
Iterator<Object> iter2 = iter.clone();
for(;iter2.hasNext();) {
Object b = iter.next();
しかし、真剣に、それはハックです。それがすべてのJavaコレクションで機能する場合は驚きます。より信頼性がありますが、Javaイテレータを使用したハックの回避策と同じです。
for(Object a : list) {
Iterator<Object> biter = list.iter();
while(biter.next() != a) { };
for(; biter.hasNext(); ) {
Object b = biter.next();
一般に、java foreach構文for(Clazz object : iterable) {
は「かわいい」ですが、sよりもはるかに強力Iterator
ではありません。実際、上記の古い整数のforループも魅力のように機能します。