Avatar billede nich01 Nybegynder
04. januar 2003 - 22:02 Der er 12 kommentarer og
1 løsning

Arraylist som kartotek

Jeg skal kunne holde styr på navn adresse og tlf.nummer.

Kan en Arrayliste holde styr på dette.
Kan man oprette et objekt med disse tre kriterier og indsætte det i en Arraylist?
Hvordan gemmer man en arraylist i en fil?
Og hvordan søger man efter navn eller adreses eller tlfnr., når de er i objekterne som er i arraylisten.
Eller er der en nemmere måde?
Ville det være smartere at bruge Arrays fx to dimensionel?
Avatar billede arne_v Ekspert
04. januar 2003 - 22:10 #1
Du kan godt lave en klasse som ineholder de 3 informationer
og indsætte instanser af den klasse i en ArrayList.

Og du kan også godt hente ud igen.
Avatar billede nich01 Nybegynder
04. januar 2003 - 22:11 #2
Kan man også søge efter et hvilket som helst kriterier
Avatar billede arne_v Ekspert
04. januar 2003 - 22:13 #3
public class Info {
  private String navn;
  private String adresse;
  private String tlf;
  public Info(String navn, String adresse, String tlf) {
      this.navn = navn;
      this.adresse = adresse;
      this.tlf = tlf;
  }
  public String getNavn() {
      return navn;
  }
  public String getAdresse() {
      return adresse;
  }
  public String getTlf() {
      return tlf;
  }
}



ArrayList list = new ArrayList();
list.add(new Info("xxx", "yyy", "zzz"));
list.add(new Info("xxx2", "yyy2", "zzz2"));
Info inf;
for(int i = 0; i < list.size(); i++) {
  inf = (Info)list.get(i);
  System.out.println(inf.getNavn() + " " + info.getAdresse() + " " + inf.getTlf());
}
Avatar billede arne_v Ekspert
04. januar 2003 - 22:14 #4
Ovenstående eksempel viser lidt hvordan man kan
bruge en klasse og ArrayList.
Avatar billede arne_v Ekspert
04. januar 2003 - 22:16 #5
Med en ArrayList vil du skulle søge igennem alle
elementer og sammenligne getXxxx med den værdi du har
for felt xxxx, når du skal søge.

Hvis du kun skal søge p.g.a. et felt f.eks. navn, så
kan du bruge en HashMap i.s.f en ArrayList og bruge
navn som key og din "Info" klasse som value.

Så er det nemt at søge efter ert besmet navn.
Avatar billede arne_v Ekspert
04. januar 2003 - 22:17 #6
Alternativt kan du lave 3 String arrays af samme længde
og gemme de 3 felter i hvert sit array.

Den løsning er måske praktisk men ikke særligt "god Java".
Avatar billede arne_v Ekspert
04. januar 2003 - 22:19 #7
Og det sidste spørgsmål: gemme på fil.

Du kan godt serialisere et ArrayList objekt og
skrive det til fil.

Men lad være. Det vil kun give problemer.

To forslag:

1)  Brug en database og gem Info objekter via JDBC
    i en tabel med 1 felt per felt i objektet

2)  Skriv til en tekst-fil i et passende format f.eks.
    1 linier per objekt og felter adskilt af komma
Avatar billede nich01 Nybegynder
04. januar 2003 - 22:30 #8
[Hvis du kun skal søge p.g.a. et felt f.eks. navn, så
kan du bruge en HashMap i.s.f en ArrayList og bruge
navn som key og din "Info" klasse som value.]

Hvad er en HashMap??
Var det muligt du kunne give et eksempel på denne søge måde?

Er der nemmest at gemmme via JDBC eller tekst-fil?
Avatar billede arne_v Ekspert
04. januar 2003 - 22:36 #9
Lad mig illustere med et lille eksempel.

Vi bruger Info klassen ovenfor og siger at vi vil
gemme Hansen og Jensen og så finde Jensen igen.

ArrayList:

ArrayList list = new ArrayList();
list.add(new Info("Hansen", "Hvænget", "1111111"));
list.add(new Info("Jensen", "Jgade", "22222222"));
Info inf;
for(int i = 0; i < list.size(); i++) {
  inf = (Info)list.get(i);
  if(inf.getNavn().equals("Jensen")) {
      System.out.println("Jensen bor på " + inf.getAdresse());
  }
}

HashMap:

HashMap map = new HashMap();
map.put("Hansen", new Info("Hansen", "Hvænget", "1111111"));
map.put("Jensen", new Info("Jensen", "Jgade", "22222222"));
Info inf = (Info)map.get("Jensen");
System.out.println("Jensen bor på " + inf.getAdresse());

Nemmere ikke sandt !
Avatar billede arne_v Ekspert
04. januar 2003 - 22:38 #10
JDBC versus tekst-fil ?

Afhænger meget af hvor mange data du skal gemme,
hvordan du vil bruge data fremover, hvorvidt du har
en database i forvejen etc..

Hvis du kun har 5 records, så ville jeg nok vælge en
tekst-fil.

Hvis du har 500 records, så ville jeg gemme dem i
en database og læse dem alle op af databasen
ved program-start (i ArrayList eller HashMap).

Hvis du har 50000 records, så ville jeg bruge
en database og kun hente dem op af databse per
request d.v.s. bruge en SQL sætning til at finde
Jensen med.
Avatar billede nich01 Nybegynder
04. januar 2003 - 22:48 #11
Jeg tror jeg holder mig til tekst filen.
Jeg kender desværre intet til HashMap så jeg må nok holde mig til arraylist, men du har ret det er noget nemmere.
Du skal have mange tak for hjælpen.
Avatar billede nich01 Nybegynder
05. januar 2003 - 17:02 #12
Ja jeg kan ikke helt få det til at virke...
   
Du skrev følgende kode
[public class Info {
  private String navn;
  private String adresse;
  private String tlf;
  public Info(String navn, String adresse, String tlf) {
      this.navn = navn;
      this.adresse = adresse;
      this.tlf = tlf;
  }
  public String getNavn() {
      return navn;
  }
  public String getAdresse() {
      return adresse;
  }
  public String getTlf() {
      return tlf;
  }
}



ArrayList list = new ArrayList();
list.add(new Info("xxx", "yyy", "zzz"));
list.add(new Info("xxx2", "yyy2", "zzz2"));
Info inf;
for(int i = 0; i < list.size(); i++) {
  inf = (Info)list.get(i);
  System.out.println(inf.getNavn() + " " + info.getAdresse() + " " + inf.getTlf());
}]

Jeg har prøvet at få den til at virke men det er ikke lykkedes.
Skal det deles op i to classer?
Avatar billede arne_v Ekspert
05. januar 2003 - 17:28 #13
Ja.

Det øverste er en komplet klasse.

Det andet er et kode fragment fra en metode i en anden
klasse.

Og det var bare for at vide hvordan man gemmmer noget i en
ArrayList og kan finde det frem igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester