Generische Methode

AlexD

Aktives Mitglied
Hallo zusammen,


Wir haben für heute eine Aufgabe abzugeben welche ich einfach nicht richtig verstehe.

Ich soll eine Generische Klassenmethode max2() schreiben die das zweitgrößte Element einer Liste liefert.

Was ja so eigentlich recht einfach ist, Array.sort und dann das zweitgrößte ausgben.

Aber die Methode soll eine Liste als Argument bekommen und dann als zweites Argument ein Komparator, der den Vergleich zweier Element definiert.

Wenn weniger als zwei Elemente enthalten sind soll eine IllegalArgumentException geschmissen werden.

bis jetzt hab ich das

Java:
import java.util.List;

public class ListAlgo {

	public static <T> T max2(List<T> liste,Comparator<T> a) throws IllegalArgumentException {
        if (liste.size() < 2) throw new IllegalArgumentException("Liste hat weniger als 2 Elemente");
        
        T max2 = liste.get(1);


        return max2;
    }
	
}

ich versteh einfach nicht wie ich den Comparator da nutzen soll ?



hat da einer nen Denkanstoss für mich ?

vielen Dank im voraus

Alex
 
Zuletzt bearbeitet:
Du übergibst dem Komparator beide zu vergleichende Objekte und anhand des Rückgabewerts (negativ: erstes Element ist kleiner, null: beide gleich; positiv: erstes Element ist größer) sortierst du deine Liste.

Es gibt auch die API Methode Collections.sort(List<T>, Comparator<S super T>), mit der du es machen könntest aber ich denke, du sollst es selber schreiben.
 
Zuletzt bearbeitet:
Ich hab das Jetzt mal erweitert aber das funktioniert noch immer nicht ;(


Java:
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ListAlgo {

	public static <T extends Comparable<T>> T max2(List<T> liste,Comparator<T> a) throws IllegalArgumentException {
        if (liste.size() < 2) throw new IllegalArgumentException("Liste hat weniger als 2 Elemente");
    
   
        Collections.sort(liste, a);
 
        T max2 = liste.get(1);
        
        return max2;
    }
	
}

Müsste das nicht jetzt eigentlich funktionieren?
 
Zuletzt bearbeitet:
Java:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ListAlgo {

	public static void main(String args[]){
		List<Integer> list = new ArrayList<>();
		list.add(-500);
		list.add(500);
		
		list.add(312);
		list.add(515);
		list.add(-21);
		list.add(0);
		System.out.println(max2(list,new IntComparator()));
		
		
	}
	
	
	public static <T extends Comparable<T>> T max2(List<T> list,
			Comparator<T> comp) throws IllegalArgumentException {
		if (list.size() < 2)
			throw new IllegalArgumentException(
					"Liste hat weniger als 2 Elemente");
		List<T> copyList = new ArrayList<>(list);
		Collections.sort(copyList, comp);
		
		// list.size()-1 wäre das letzte Element
		// list.size()-2 also das vorletzte
		
		return copyList.get(list.size() - 2);
	}

	
}
class IntComparator implements Comparator<Integer>{
	@Override
	public int compare(Integer a, Integer b) {		
		return a.compareTo(b);
	}
	
}
 

Neue Themen


Zurück
Oben