Hm...: woher weiß ich welches java werkzeug wieviel laufzeit verbrauch

hi leute,

ich habe gerade erstaunt festgestellt, dass der contains-befehl einer arraylist viel mehr laufzeit verbraucht, als der containskey-befehl einer hashmap.

könnt ihr mir sagen wie ich generell herausfinden kann, wieviel laufzeit das ausführen einer methode eines bestimmten java objekts benötigt? (hierbei meine ich java objekte die von den entwicklern von java erstellt wurden, nicht meine eigenen objekte)

beispiel:
ArrayList und HashMap haben beide die funktion contains bzw. containskey

der folgende code läuft mit einer hashmap:

HashMap<String,Strin> eids = new HashMap();

sehr schnell und mit einer:

ArrayList<String> eids = new ArrayList();

sehr langsam

  
for(int i=0; i<list.size(); i++)  
		{  
			if(eids.containsKey(list.get(i)[0]))  
				newlist.add(list.get(i));  
		}  

könnt ihr mir sagen wie ich sowas herausfinden kann, ohne das erst im programm testen zu müssen? gibt es eventuell irgendwo eine passende laufzeitübersicht?

  1. Tach!

    ich habe gerade erstaunt festgestellt, dass der contains-befehl einer arraylist viel mehr laufzeit verbraucht, als der containskey-befehl einer hashmap.

    Die Werte liegen unsortiert vor und können auch mehrfach vorkommen. Um das Vorkommen eines Wertes zu ermitteln, muss durch die Liste
    gelaufen werden, zumindest bis zum ersten Vorkommen. Schlüssel hingegen sind eindeutig und können sortiert abgelegt werden (ob das der Fall ist, weiß ich nicht), und dann gibt es Verfahren, um sehr schnell einen Wert in einer sortierten Liste zu finden.

    könnt ihr mir sagen wie ich generell herausfinden kann, wieviel laufzeit das ausführen einer methode eines bestimmten java objekts benötigt? (hierbei meine ich java objekte die von den entwicklern von java erstellt wurden, nicht meine eigenen objekte)

    Das steht mitunter in der Dokumentation.

    ArrayList und HashMap haben beide die funktion contains bzw. containskey

    ArrayList hat nur contains() - aus verständlichen Gründen. Es existiert also kein Mechanismus, um gezielt auf einen Wert zuzugreifen, außer dem numerischen Index. Bei der HashMap muss dir ebenfalls der Schlüssel bekannt sein, um schnell zugreifen zu können. In beiden Fällen ist ein Suchen in den Werten gleich langsam. Das kann man nur beschleunigen, indem man die Werte sortiert. Dann kann man die üblichen schnell arbeitenden Suchalgorithmen für sortierte Datenmengen verwenden.

    ArrayList<String> eids = new ArrayList();
    if(eids.containsKey(list.get(i)[0]))

    Das passt nicht zusammen. Wenn du contains() mit containsKey() vergleichst, bekommst du das Ergebnis von Äpfeln und Birnen.

    dedlfix.

    1. danke

      ArrayList<String> eids = new ArrayList();
      if(eids.containsKey(list.get(i)[0]))

      Das passt nicht zusammen. Wenn du contains() mit containsKey() vergleichst, bekommst du das Ergebnis von Äpfeln und Birnen.

      tipp fehler von mir hier im forum, im code habe ich eine hashmap benutzt. weil diese mit containskey viel schneller lief als arraylist mit contains

      bei der documentation habe ich das problem:

      http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#contains(java.lang.Object)

      -> das ich hier leider keine hinweise auf die geschwindigkeit der methode contains finde. bzw keinen hinweis, wie diese methode arbeitet :-(

      gibt es eventuell irgendwo eine andere docu die solche dinge beinhaltet?

      1. Tach!

        bei der documentation habe ich das problem:
        http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#contains(java.lang.Object)
        -> das ich hier leider keine hinweise auf die geschwindigkeit der methode contains finde. bzw keinen hinweis, wie diese methode arbeitet :-(

        Die Hinweise zum Zeitverbrauch stehen oben im allgemeinen Text der Klasse.

        dedlfix.

        1. Tach!

          bei der documentation habe ich das problem:
          http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#contains(java.lang.Object)
          -> das ich hier leider keine hinweise auf die geschwindigkeit der methode contains finde. bzw keinen hinweis, wie diese methode arbeitet :-(

          Die Hinweise zum Zeitverbrauch stehen oben im allgemeinen Text der Klasse.

          dedlfix.

          den text habe ich bisher noch nie gelesen, jetzt sehe ichs, danke!