* Шукати парний об'єкт.
* @ param i Об'єкт, для якого шукається парний об'єкт.
* @ param items Початкове безліч.
*/
private void findPair (Item i, List lt; Item gt; items) {
if (! (i. hasPair ())) {r= new Random (); pair;
do {= items. get (r. nextInt (items. size ()));
} while (pair. hasPair () || pair == i) ;. setPair (pair) ;. setPair (i);
}
}
/**
* Порахувати парні об'єкти.
* @ param items Початкове безліч.
* @ return Кількість пар.
*/
public int countPairs (List lt; Item gt; items) {
int pairsCounter=0;
for (Item i: items) {
if (i. hasPair ()) {++;
}
}
return pairsCounter/2;
}
/**
* Видобути найбільш важкий об'єкт. lt; p gt;
* Отриманий об'єкт віддаляється зі списку.
* @ param items Список об'єктів.
* @ return Найважчий об'єкт.
*/
public Item extractHardest (List lt; Item gt; items) {hardest=items. get (0);
for (Item i: items) {
if (i. weight gt; hardest. weight) {= i;
}
}. remove (hardest);
return hardest;
}
/**
* Видобути найбільш об'ємний об'єкт. lt; p gt;
* Отриманий об'єкт віддаляється зі списку.
* @ param items Список об'єктів.
* @ return Самий об'ємний об'єкт.
*/
public Item extractLargest (List lt; Item gt; items) {largest=items. get (0);
for (Item i: items) {
if (i. volume gt; largest. volume) {= i;
}
}. remove (largest);
return largest;
}
public void sort (List lt; Item gt; items, SORT_TYPE. template) {
int itemsSize=items. size ();
int templateLength=template. length;
for ( int i=0; i lt; itemsSize; i ++) {_TYPE type=template [i% templateLength ];
for ( int j=i; j lt; itemsSize; j ++) {
for ( int k=i; k lt; itemsSize; k ++) {
switch (type) {
case VOLUME :
if (items. get (j). volume lt; items. get (k). volume) {buffer=items. get (j) ;. set (j, items. get (k)) ;. set (k, buffer);
}
break ;
case WEIGHT :
if (items. get (j). weight lt; items. get (k). weight) {buffer=items. get (j) ;. set (j, items. get (k)) ;. set (k, buffer);
}
break ;
case UTILITY :
if (boss. getUtility (items. get (j)) gt; boss. getUtility (items. get (k))) {buffer=items. get (j) ;. set (j, items. get (k)) ;. set (k, buffer);
}
break ;
case SIZE :
if (countSize (items. get (j)) gt; countSize (items. get (k))) {buffer=items. get (j) ;. set (j, items. get (k)) ;. set (k, buffer);