Hjælp til HashSet
Hej jeg har følgende kode:public class Reader {
private static final String BASE="C:/Java/eclipse/workspace/thesandbox/diverse/util/CSVReader/";
private static final String CSVFILE=BASE+"fil.csv";
public static void main(String[]args) {
new Reader().openFile();
}
public void openFile() {
int linecount = 0;
try {
File csvfile = new File(CSVFILE);
CSVReader csvReader = new CSVReader(new InputStreamReader(new FileInputStream(csvfile), "ISO-8859-1"), ',');
String[] nextLine;
while ((nextLine = csvReader.readNext()) != null) {
if (nextLine[0].trim().length() == 0) {
linecount++;
continue;
}
String countrystr = nextLine[6]+ " (" + nextLine[7] + ")";
updateGroups(countrystr);
linecount++;
}
}
catch (Exception e) {
System.out.println(e);
}
}
public void updateGroups(String countrystr) {
}
}
Jeg læser en linie("fra en kommasepereretfil") ad gange. "Bruger dog opencsv". String countrystr et land jeg henter fra filen. Jeg vil så gerne sammenligne dette land med de lande jeg har i min database. Hvis landet countrystr ikke er i database skal det tilføjes i databasen. Jeg bruger Hibernate. Jeg får returneret GroupModel objekter i mit GroupModel[] array. Det jeg så gerne vil er, at tjekke hver objekts String land attribut op i mod det jeg har hentet fra den kommasepererede fil (countrystr)
String query = "FROM GroupModel";
Query q = session.createQuery(query);
GroupModel[] groups = (GroupModel[])q.list().toArray(new GroupModel[0]);
Mit spørgsmål er følgende
Jeg Kunne godt iterer over samtlige groups og tjekke med equal.
for (int i=0; i<groups.length; i++) {
if(groups[i].equals(countrystr) {
// gem i databasen
}
}
Men jeg har ufattelige mange groups objekter og der vil tage lang tid at iterer over ale objekter. Kan jeg ikke med fordel kovertere mine objekter til en mængde Set setGroups new HashSet();
og så tjekke på om countrystr er i mægden
if(setGroups.contains(countrystr))
{
// gem i databasen
}
Efter sigende skulle et HashSet generer et unikt id for hvert objekt der er i mægden. Så når man forespørger efter et objekt.
Laves der et id for det forespurgte objekt hvorefter man slår op i HashSet ud fra det pågældende id. Dvs. man bliver ikke nødt til at iterer igennem alle ens elementer i mængden.
Er mine antagelser forkeret
Kan være 100% sikker på at de id'er er bliver genereret til HashSet altid bliver generet unikt
Hvis de er unikke hvorfår jeg så nedenståede forskellige hashværder ? (4072869 er forskellg fra 1671711) Så jeg er lidt bange for at jeg ikke kan bruge HashSet.
String s = "ok";
StringBuffer sb = new StringBuffer(s);
System.out.println(s.hashCode()+" "+sb.hashCode());
String t = "ok";
StringBuffer tb = new StringBuffer(t);
System.out.println(t.hashCode()+" "+tb.hashCode());
3548 4072869
3548 1671711
