tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Sentoo
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
550
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Larrywayn Larrywayn ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Berlin
    Beiträge
    60
    Eigentlich wollte ich nur mal fragen, ob es so eine Datenstruktur gibt:
    verhalten ungefähr wie eine Queue. Es werden Objekte drauf gepackt. Die Reihenfolge ist eigentlich 2. rangig. Auf jedenfall haben die Objekte natürlich mehrere Attribute/Variablen. Sobald sich ein bestimmter Wert ändert, quasi so eine Art Key, soll das Objekt automatisch, nach vorne/an den Anfang rutschen.
    Hier ein kleines Bild, was das verdeutlicht.
    http://i39.photobucket.com/albums/e1...a/problem1.png

    Jedes mal die komplette Struktur/Liste zu durchlaufen oder permanent selber sortieren, würde ich gerne vermeiden, weil sowieso immer nur 1 Objekt abgearbeitet wird. Es kann sein, dass kein Objekt geholt werden kann, was das durchlaufen unnütz machen würde. Deshalb wäre es praktisch nur zu gucken, ob das 1. Objekt die Anforderung erfüllt, wenn nicht, dann wird nichts weiter gemacht. Ansonsten wird das Objekt von der Struktur geholt und aus ihr entfernt.

    Hatte überlegt, dass die Objekte eine Referenz auf ihre Struktur/Liste bekommen und wenn die entsprechende Methode aufgerufen wird, es sich selber nach vorne packt. Was ich nur absolut nicht schön finde, weil danach ist das Objekt nicht mehr an diese Struktur/Liste gebunden.
    Wäre für jeden Denkanstoß dankbar
     
    http://larrywayn.pytalhost.eu xD
    Friss zeurst, sonst wirst du gefressen.

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    bin mir zwar sehr unsicher, ob ich Dich auch nur im Ansatz richtig verstanden habe, aber schau Dir mal alles zu HashMaps usw. an !
    http://www.dpunkt.de/java/Referenz/D.../24.html#x3089

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    Larrywayn Larrywayn ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Berlin
    Beiträge
    60
    Ich kenne HashMaps und Queues , dass ist nicht das Problem. Auch nicht irgendwas selber zu implementieren. Nur ein Ansatz fehlt bzw. ein Hinweis ob es so was eben gibt was das automatisch macht.
    HashMap, die müsste man selber sortieren, sobald sich der Wert bzw, Key ändert. ich dachte da gibt es vll. schon irgendwas ähnliches. =)

    Aber trotzdem erstmal danke für die Antwort. ist wirklich schwer zu erklären mh
     
    http://larrywayn.pytalhost.eu xD
    Friss zeurst, sonst wirst du gefressen.

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Zitat Zitat von Larrywayn Beitrag anzeigen
    HashMap, die müsste man selber sortieren, sobald sich der Wert bzw, Key ändert. ich dachte da gibt es vll. schon irgendwas ähnliches. =)
    IMHO eigentlich nicht, da ja der Zugriff über den expliziten Key-Wert passiert ...

    Wonach soll denn nun sortiert werden
    Nach dem Key oder nach dem Wert
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    Larrywayn Larrywayn ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Berlin
    Beiträge
    60
    Naja je nachdem.
    Nehmen wir einfach an der Wert/Key wäre ein Boolean, welche am Anfang alle auf false sind. Diese Objekte liegen nun in dieser Struktur. irgendwann, dass kann nach 2 Sekunden oder nach 2 Stunden sein, ändert sich der Wert des Booleans auf true und dadurch soll das Objekt in der Struktur an den Anfang rutschen, damit gesehen wird. Aha Objekt bereit kann runter genommen werden. Und eben ohne, dass ich die Struktur permanent selber durchlaufen oder sortieren muss :/
    Ich weiß ist ziemlich speziell. O:
     
    http://larrywayn.pytalhost.eu xD
    Friss zeurst, sonst wirst du gefressen.

  6. #6
    Avatar von Sentoo
    Sentoo Sentoo ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Brühl
    Beiträge
    131
    Warum nimmst Du nicht eine Implementierung der BlockingQueue und legst das Object erst dann in die Queue, wenn dieses Flag gesetzt wird? Der Konsument (am besten in einem eigenen Thread) würde so lange nichts machen, bis er ein Element in der Queue findet. Die Elemente könnten sich selbst in die Queue legen ...

    Die Elemente in der Queue zu sortieren ginge mit einer PriorityQueue oder eben auch einer PriorityBlockingQueue.

    Dazu müsste deine Object Klasse über eine natürliche Ordnung verfügen (also Comparable implementieren) oder Du stellst einen Comparator bereit.

    Hoffe es hilft.
     

  7. #7
    Larrywayn Larrywayn ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Berlin
    Beiträge
    60
    Das passiert ja schon ich kann es ja mal kurz erklären. es ist eine server-client Anwendung.
    Der Socket kommt in eine Queue, welche abgearbeitet wird, dann wird ein Objekt erzeugt, welches die benötigten Streams und Daten beinhaltet und dieses soll dann in eine HashMap<Integer, Daten>. Das Problem an der Sache ist, das der Integerwert erst aus einer Datenbank geholt werden kann, nachdem dass Datenobjekt bestimmte Daten empfangen hat. Also muss ich es zwischenspeichern und solange warten lassen. Es darf aber den eigentlichen Thread, welcher die Arbeit macht und neue Objekte bearbeitet nicht blockieren. Deshalb macht dass das Objekt in einen eigenen Thread.

    Priority Queue stimmt die hatte ich gesucht aber ob die genau dass macht weiß ich jetzt nicht. Werd ich auf jedenfall noch mal angucken
    Das mit dem Comparable implementieren und co wäre kein Problem. Aber muss man dann nicht trotzdem selber noch aufrufen, dass sie sortiert werden soll?
    Zu wenig schlaf, falls jetzt etwas komisch klingt sorry=)
     
    http://larrywayn.pytalhost.eu xD
    Friss zeurst, sonst wirst du gefressen.

  8. #8
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    muss wirklich die Struktur permanent sortiert sein, oder reicht es, wenn man nur über die Einträge gemäß ihrer "Ordnung" iterieren kann?
    Wenn das reicht könntest du einfach folgendes machen:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    
    package de.tutorials;
     
    import java.util.ArrayList;
    import java.util.SortedSet;
    import java.util.TreeSet;
     
    public class DynamicallySortedDataStructureExample {
     
      public static void main(String[] args) {
        final SortedSet<Item> items = new TreeSet<Item>();
        Item itemA = new Item("A");
        items.add(itemA);
        Item itemB = new Item("B");
        items.add(itemB);
        Item itemC = new Item("C");
        items.add(itemC);
     
        print(items);
        itemB.setValue(3);
        print(items);
        itemC.setValue(5);
        print(items);
        itemA.setValue(8);
        print(items);
        itemB.setValue(null);
        print(items);
        itemA.setValue(null);
        print(items);
      }
     
      private static void print(SortedSet<Item> items) {
        for (Item item : new TreeSet<Item>(new ArrayList<Item>(items))) { // recompute order for iteration
          System.out.println(item);
        }
        System.out.println("#######");
      }
     
      static class Item implements Comparable<Item> {
        private final String id;
        private volatile Comparable<? super Object> value;
     
     
        public Item(String id) {
          this.id = id;
        }
     
     
        public String getId() {
          return id;
        }
     
     
        public Comparable<?> getValue() {
          return value;
        }
     
     
        @SuppressWarnings("unchecked")
        public void setValue(Comparable value) {
          this.value = value;
        }
     
     
        @Override
        public int hashCode() {
          final int prime = 31;
          int result = 1;
          result = prime * result + ((id == null) ? 0 : id.hashCode());
          return result;
        }
     
     
        @Override
        public boolean equals(Object obj) {
          if (this == obj) return true;
          if (obj == null) return false;
          if (getClass() != obj.getClass()) return false;
          Item other = (Item) obj;
          if (id == null) {
            if (other.id != null) return false;
          } else if (!id.equals(other.id)) return false;
          return true;
        }
     
     
        @Override
        public String toString() {
          StringBuilder builder = new StringBuilder();
          builder.append("Item [id=");
          builder.append(id);
          builder.append(", value=");
          builder.append(value);
          builder.append("]");
          return builder.toString();
        }
     
     
        @Override
        public int compareTo(Item that) {
          int order = 0;
     
          if (this.value != that.value) { // greates value up
            if (this.value == null) {
              order = 1;
            } else if (that.value == null) {
              order = -1;
            } else {
              order = -this.value.compareTo(that.value);
            }
          }
     
          if (order == 0) {
            order = this.id.compareTo(that.id); //default sort by alpha asc
          }
          return order;
        }
      }
    }

    Ausgabe:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    Item [id=A, value=null]
    Item [id=B, value=null]
    Item [id=C, value=null]
    #######
    Item [id=B, value=3]
    Item [id=A, value=null]
    Item [id=C, value=null]
    #######
    Item [id=C, value=5]
    Item [id=B, value=3]
    Item [id=A, value=null]
    #######
    Item [id=A, value=8]
    Item [id=C, value=5]
    Item [id=B, value=3]
    #######
    Item [id=A, value=8]
    Item [id=C, value=5]
    Item [id=B, value=null]
    #######
    Item [id=C, value=5]
    Item [id=A, value=null]
    Item [id=B, value=null]
    #######

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  9. #9
    Avatar von Sentoo
    Sentoo Sentoo ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Brühl
    Beiträge
    131
    Also ehrlich gesagt, ich verstehe noch nicht, was für ein Problem Du lösen möchtest, evtl. leide ich da einfach unter einer Verständnisblockade

    Hast Du ein Sequenzidagramm o.ä. zu der Problemstellung? Wäre für deine Doku vielleicht eh nicht schlecht. Wenn mal jemand anderes außer Dir diese Programmstelle warten muss, wäre der bestimmt dankbar ...
    vfl_freak bedankt sich. 

  10. #10
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Lies dir mal den Wikipedia-Artikel über Prioritätswarteschlangen durch, das dürfte dir weiterhelfen.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 10.04.08, 08:37
  2. Antworten: 4
    Letzter Beitrag: 19.06.07, 11:11
  3. Nur die Spalte "Field" aus der Struktur auslesen
    Von sirina im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 24.01.06, 12:16
  4. Antworten: 2
    Letzter Beitrag: 03.11.05, 17:45
  5. Antworten: 2
    Letzter Beitrag: 30.03.05, 21:19