Value einer Hashtable nach deren grüße sortieren

sim26

Mitglied
Hallo zusammen

Ich möchte die Value einer Hashtable nach deren grüße sortieren, dann die ersten 100 value die höch zahl haben allein in einem anderen hashtable machen. Hat da jemand eine zündende Idee?
I arbeite mit einem String die ungefähr mir 4 000 000 Buchstaben ist.

Weiß ich auch nicht ob gibt’s vielleicht andere Methode außer hash wenn die zahl so hoch ist.

Die Programme ist folgendes



public class Test {

public static void main(String[] args) throws Exception {
String s = "dfghtzhb…………………";
int x = 3;

Hashtable map = new Hashtable();
for (int i = 0; i < s.length()-x+1; i++) {

String sub = s.substring(i, i + x);
Integer anz = (Integer) map.get(sub);

if (anz == null) {
anz = new Integer(1); // mit 1 anfangen
} else {
anz = new Integer(anz.intValue()+1); // erhöhen
}
System.out.println(sub+" "+anz);
map.put(sub,anz);
}
}

}
 
Ich weiß nicht ganz was du machen willst.
Kannst du das etwas näher und DEUTLICHER und DEUTSCHER erklären?
Ansonsten würde ich mal sagen:
Nimm doch einen Array.
Bei einen String-Array hat jedes Element die Eigenchaften eines Strings.
Also auch String.length.
Dann musst du das nur noch in dein Sortierverfahren einbauen.
 
die programme macht folgendes:

-->Ich habe ein Sequence z.b.

ACGCTCGCTGATATAT


Wenn ich die Nr. „x“ z.b. zu meine Programme gebe dann soll schreiben die ersten x Buchstaben und er merkt das das ist nur ein mal gibt "1" dann er schreibt in den nächsten Linie noch mal die x aber minus die erste Buchstabe von dem ersten x plus ein neue Buchstabe und er vergleicht das mit dem ersten wenn das ist das gleiche dann wir haben 2 wenn nicht dann ein 1 und soweiter.


D.h.
Sequence: ACGCTCGCTGATATAT

X =3

Erwartete Ergebnisse sind:

ACG 1
CGC 1
GCT 1
CTC 1
TCG 1
CGC 2
......
……....
...

jetzt Ich möchte die Value meiner Hashtable erstens nach deren grüße sortieren, dann die ersten 100 value die höch zahl haben allein in einem anderen hashtable machen um weiter mit die arbeiten zu können.

höffentlich ist das jetzt klar genug
 
sim26 hat gesagt.:
die programme machen folgendes:

-->Ich habe eine Sequence z.b.

ACGCTCGCTGATATAT


Wenn ich die Nr. „x“ z.b. zu meinem Programm gebe dann soll er / es die ersten x Buchstaben schreiben und wenner merkt, dass esdas nur einmal gibt (was machst du mit der "1"? iss sich kein deutsch)dann soll er in der nächsten Linie das x minus Buchstaben .....

Hier hört meine Geduld leider auf, es tut mir wirklich Leid, ich bin normalerweise kein Mensch der auf Rechtschreibung und Grammatik pocht, weil auch mir des öfteren genug Fehler unterkommen, aber so penetrant alles falsch zu schreiben, kann nicht wirklich dein Ernst sein...wenn das nen Scherz sein soll, hoffe ich nicht das du auf deine Inhatliche Frage (wo hast sie versteckt?) eine qualifizierte Antwort erwartest.

Mfg
Dom
 
Sorry dass ich das nicht gut und besser erklären kann, dieses Mal versuch ich mehr deutlicher,

Ich habe :

String sequence = " ACGCTCGCTGATATAT // ich habe eine Seqeunce von Buchstaben

int x = 3; //dann eine variable x, hier Z.B : x=3

dann werde alles in einem Hashtable gemacht.

Als clue : Buchstaben jedes mal x zahl werde genommen

Als Value :wie oft wiederholt sich den Value überhaupt in dem Ergebnisse.


er nimmt die ersten X Buchstaben, d.h. hier : ACG (clue). Und als value kriegt er 1 weil bis jetzt nur einmal
gibt ACG in dem Table

dann nächste schritt nehmt er : CG + nächste Buchstabe, d.h. CGC . hier auch value kriegt ein 1.

Bis Z.B. CGC er merkt das es gab schon mal CGC. D.h. value erde dann 2 neben CGC.

ACGCTCGCTGATACGCTCGAT………..
ACG 1
CGC 1
GCT 1
CTC 1
TCG 1
CGC 2
GCT 2
CTG 1
TGA 1
GAT 1
ATA 1
TAC 1
ACG 1
CGC 3
……..

Das habe ich dann schon gemacht,

jetzt Ich möchte die Value einer Hashtable nach deren grüße sortieren, dann die ersten 100 value die höch zahle haben allein in einem anderen hashtable machen.
 
Hi !

Also ich muss mal meinen Senf hier loslassen. Ich finde es wichtig, daß man auf Grammatik achtet. Zudem bin ich der Meinung, daß jeder, der Ausländer in einem Land ist, die Sprache dieses Landes lernen sollte.

Andereseits bin ich auch der Meinung, daß man solche Leute dabei auch unterstützen sollte, anstatt direkt auf ihnen rum zu hacken ! Ich gebe zu, daß es schwierig ist, daß Problem von "sim" nachzuvollziehen, aber dann sollte man gerade helfen, sonst passiert nämlich genau das, worüber ihr euch hier aufregt. Wenn ich zum Beispiel ein Russe wäre, der nun hier lebt und versucht die deutsche Sprache zu lernen und schreibe in ein deutsches Forum in gebrochenem Deutsch und werde dann direkt angemacht, würde ich es morgen wieder in einem russichem Forum versuchen (und verliere veilleicht auch ein kleines bisschen die Lust am Deutsch- lernen).

Ich denke, ich verstehe auch eure Standpunkte ein wenig, aber gleich so auf die Tour : "Meine Geduld ist am Ende ..." finde ich echt nicht nett. Auch wir sind ein wenig mitverantwortlich an gewissen Dingen ...

Ich möchte hier keinem zu nahe treten, aber das musste mal raus.

Nix für Ungut und schönes Wochenende,

Krösi
 
Sorry. Ich steh immernoch auf dem Schlauch.
Das Beste ist, du schickst mal deinen Code.
Und dann kommentier mal im Code, wo du das Problem hast.
PS: Mit dem "gesamten" Code geht sowas immer leichter zu
beantworten
(Tipp!)
 
Sowie ich Dich verstehe, suchst Du die Häufigkeit immerwieder vorkommender Wortgruppen, deren Länge Du mit int x vorgibst, das habe ich zumindest verstanden.

Code:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Haeufigkeit {
  public static void main(String[] args) {
    Integer temp;
    String s = "ACGCTCGCTGATATAT";
    int x = 3;
    Map map = new HashMap();
    for (int i = 0; i < (s.length() - x); i++) {
      temp = (Integer)map.get(s.substring(i, i + x));
      if (temp == null) {
        map.put(s.substring(i, i + x), new Integer(1));
      } else {
        map.put(s.substring(i, i + x), new Integer(temp.intValue() + 1));
      }
    }
    Object key;
    for (Iterator it = map.keySet().iterator(); it.hasNext(); ) {
      key = it.next();
      System.out.print(key);
      System.out.print("=");
      System.out.println(map.get(key));
    }
  }
}

In Deiner Map stehen nun alle Wortgruppen als Key und deren Häufigkeit als Value:

HTML:
TAT=1
ACG=1
ATA=2
CGC=2
CTC=1
GAT=1
CTG=1
TCG=1
TGA=1
GCT=2
 
Hallo zusammen nochmal:

Das ist dann mein Code:

import java.io.*;
import java.util.*;
import java.awt.*;
public class test {
public static void main(String[] args)throws IOException {
load();
}
public static void load(){
int nan = 3;
String seqe="ACGTAGATAGATCAGAT";
try {
System.out.println(seqe.length());
Hashtable map=new Hashtable();
for(int i=0;i<seqe.length()-nan+1;i++){

String seq = seqe.substring(i,i+nan);
Integer zahl=(Integer) map.get(seq);
if (zahl==null){
zahl=new Integer(1);
}//if
else{
zahl=new Integer(zahl.intValue()+1);
}//else

System.out.println(seq+" "+zahl);
map.put(seq,zahl);
}//for i
}//try
catch(Exception r) {
r.printStackTrace();
}
}
}

Er gibt das Ergebnis:

ACG 1
CGT 1
GTA 1
TAG 1
AGA 1
GAT 1 ATA 1
TAG 2
AGA 2
GAT 2
ATC 1
TCA 1
CAG 1
AGA 3
GAT 3
Was ich will jetzt machen sollte so aussehen:

AGA 3
GAT 3
TAG 2
AGA 2
GAT 2 ACG 1
CGT 1
GTA 1
TAG 1
AGA 1
GAT 1 ATA 1
ATC 1
TCA 1
CAG 1



Ich hoffe jetzt ist klar genug, Sorry noch mal wegen meinem deutsch, bin erste seit einem Jahr hier in Deutschland........
 
Zurück