import java util Hash Set import java util

  • Slides: 31
Download presentation

import java. util. Hash. Set; import java. util. Scanner; public class Hash. Set. Example

import java. util. Hash. Set; import java. util. Scanner; public class Hash. Set. Example { public static void main(String[] args){ Hash. Set<String> my. Set = new Hash. Set<String>(); Scanner input = new Scanner(System. in); while(input. has. Next()){ String name = input. next(); if (!my. Set. contains(name)){ my. Set. add(name); } } for(String name: my. Set){ System. out. println(name); } Τοποθετούμε στο Hash. Set μόνο τα Strings τα οποία δεν έχουμε ήδη δει (δεν είναι ήδη στο σύνολο) Ένας τρόπος για να διατρέξουμε και να τυπώσουμε τα στοιχεία του Hash. Set Object[] array = my. Set. to. Array(); for (int i = 0; i < array. length; i ++){ String name = (String)array[i]; System. out. println(name); } } } Δήλωση μιας μεταβλητής Hash. Set από Strings. Ένας άλλος τρόπος για να διατρέξουμε το Hash. Set χρησιμοποιώντας την εντολή to. Array(). Ο πίνακας είναι πίνακας από Objects, και πρέπει να κάνουμε downcasting

import java. util. Hash. Map; import java. util. Scanner; Δήλωση μιας μεταβλητής Hash. Map

import java. util. Hash. Map; import java. util. Scanner; Δήλωση μιας μεταβλητής Hash. Map που συσχετίζει Strings (κλειδια) και Integers (τιμές) Για κάθε όνομα (String) το id (Integer) public class Hash. Map. Example 1 { public static void main(String[] args){ Hash. Map<String, Integer> my. Map = new Hash. Map<String, Integer>(); Scanner input = new Scanner(System. in); int counter = 0; while(input. has. Next()){ String name = input. next(); if (!my. Map. contains. Key(name)){ my. Map. put(name, counter); counter ++; } } Διατρέχοντας το Hash. Map Αν το όνομα δεν είναι ήδη στο Hash. Map τότε ανάθεσε στο όνομα αυτό τον επόμενο αύξοντα αριθμό και πρόσθεσε ένα νέο ζευγάρι (όνομα αριθμός) στο Hash. Map. Διέτρεξε το σύνολο με τα κλειδιά (ονόματα) στο Hash. Map for(String name: my. Map. key. Set()){ System. out. println(name + ": "+ my. Map. get(name)); } } } Για κάθε κλειδί (όνομα) πάρε το id που αντιστοιχεί στο όνομα αυτό και τύπωσε το.

import java. util. Hash. Map; import java. util. Scanner; public class Hash. Map. Example

import java. util. Hash. Map; import java. util. Scanner; public class Hash. Map. Example 2 { public static void main(String[] args){ Hash. Map<String, Person> my. Map = new Hash. Map<String, Person>(); Scanner input = new Scanner(System. in); int counter = 0; while(input. has. Next()){ String name = input. next(); if (!my. Map. contains. Key(name)){ Person p = new Person(name, counter); my. Map. put(name, p); counter ++; Δημιουργούμε ένα Hash. Map το οποίο } σε κάθε διαφορετικό όνομα αντιστοιχεί } ένα αντικείμενο Person. for(String name: my. Map. key. Set()){ System. out. println(my. Map. get(name)); } } } Καλείται η to. String της κλάσης Person

import java. util. Hash. Map; import java. util. Scanner; class Hash. Map. Example 3

import java. util. Hash. Map; import java. util. Scanner; class Hash. Map. Example 3 { public static void main(String[] args){ Hash. Map<String, Integer> my. Map = new Hash. Map<String, Integer>(); Scanner input = new Scanner(System. in); while(input. has. Next()){ String name = input. next(); if (!my. Map. contains. Key(name)){ my. Map. put(name, 1); }else{ my. Map. put(name, my. Map. get(name)+1); } } for(String name: my. Map. key. Set()){ System. out. println(name+": "+my. Map. get(name)); } } }

import java. util. Hash. Set; import java. util. Scanner; Θέλω να αφαιρέσω από το

import java. util. Hash. Set; import java. util. Scanner; Θέλω να αφαιρέσω από το σύνολο τα Strings με λιγότερους από 2 χαρακτήρες public class Wrong. Iterator. Example { public static void main(String[] args){ Hash. Set<String> my. Set = new Hash. Set<String>(); Scanner input = new Scanner(System. in); while(input. has. Next()){ if (!my. Set. contains(name)){ my. Set. add(input. next()); } } for (String s: my. Set){ if (s. length() <= 2){ my. Set. remove(s); } } for (String s: my. Set){ System. out. println(s); } } } Αν διατρέξουμε το set με την for-each εντολή θα πάρουμε (συνήθως) λάθος. Δεν μπορούμε να αλλάζουμε το Collection ενώ το διατρέχουμε!

import java. util. Hash. Set; import java. util. Iterator; import java. util. Scanner; Θέλω

import java. util. Hash. Set; import java. util. Iterator; import java. util. Scanner; Θέλω να αφαιρέσω από το σύνολο τα Strings με λιγότερους από 2 χαρακτήρες public class Iterator. Example { public static void main(String[] args){ Hash. Set<String> my. Set = new Hash. Set<String>(); Scanner input = new Scanner(System. in); while(input. has. Next()){ if (!my. Set. contains(name)){ my. Set. add(input. next()); } } Iterator<String> it = my. Set. iterator(); while (it. has. Next()){ if (it. next(). length() <= 2){ it. remove(); } } it = my. Set. iterator(); while (it. has. Next()){ System. out. println(it. next()); } } } Ο Iterator μας επιτρέπει να διατρέχουμε την συλλογή και να διαγράφουμε στοιχεία. Ξανα-διατρέχουμε τον πίνακα. Ο iterator πρέπει να ξανα-οριστεί για να ξεκινήσει από την αρχή του συνόλου.

import java. util. Map; java. util. Hash. Map; java. util. Iterator; java. util. Scanner;

import java. util. Map; java. util. Hash. Map; java. util. Iterator; java. util. Scanner; Θέλω να αφαιρέσω από το σύνολο τα Strings με λιγότερες από 2 εμφανίσεις class Iterator. Example 2 { public static void main(String[] args){ Hash. Map<String, Integer> my. Map = new Hash. Map<String, Integer>(); Scanner input = new Scanner(System. in); while(input. has. Next()){ String name = input. next(); if (!my. Map. contains. Key(name)){my. Map. put(name, 1); } else{ my. Map. put(name, my. Map. get(name)+1); } } Iterator<Map. Entry<String, Integer>> iter = my. Map. entry. Set(). iterator(); while(iter. has. Next()){ H entry. Set επιστρέφει μια συλλογή από if (iter. next(). get. Value() <=2){ iter. remove(); Map. entry αντικείμενα (γι αυτό πρέπει } να κάνουμε import το Map) τα οποία } παραμετροποιούμε με τους τύπους που κρατά το Hash. Map for(String key: my. Map. key. Set()){ System. out. println(key + ": " + my. Map. get(key)); } } }

import java. util. *; public class List. Iterator. Example { public static void main(String[]

import java. util. *; public class List. Iterator. Example { public static void main(String[] args){ Array. List<String> array = new Array. List<String>(); Scanner input = new Scanner(System. in); while(input. has. Next()){ String name = input. next(); array. add(name); } List. Iterator<String> it = array. list. Iterator(); while (it. has. Next()){ if (it. next(). equals("a")){ it. set("b"); it. add("c"); } } it = array. list. Iterator(); while (it. has. Next()){ System. out. println(it. next()); } } }

import java. util. *; Θέλω να αφαιρέσω από τις εμφανίσεις του String “a” από

import java. util. *; Θέλω να αφαιρέσω από τις εμφανίσεις του String “a” από την λίστα μου public class List. Iterator. Example { public static void main(String[] args){ Array. List<String> my. List = new Array. List<String>(); Scanner input = new Scanner(System. in); while(input. has. Next()){ String name = input. next(); my. List. add(name); } H κλήση της remove θα αφαιρέσει μόνο την πρώτη εμφάνιση του “a” my. List. remove("a"); for (String s: my. List){ System. out. println(s); } } } Πως θα τις αφαιρέσουμε όλες? Υπενθύμιση: η remove επιστρέφει boolean αν έγινε επιτυχώς αφαίρεση (αν άλλαξε δηλαδή η λίστα).

import java. util. *; Θέλω να αφαιρέσω από τις εμφανίσεις του String “a” από

import java. util. *; Θέλω να αφαιρέσω από τις εμφανίσεις του String “a” από την λίστα μου public class List. Iterator. Example { public static void main(String[] args){ Array. List<String> my. List = new Array. List<String>(); Scanner input = new Scanner(System. in); while(input. has. Next()){ String name = input. next(); my. List. add(name); Καλεί την remove μέχρι να επιστρέψει false } while(my. List. remove("a")); } } for (String s: my. List){ System. out. println(s); } H υλοποίηση αυτή όμως δεν είναι αποδοτική γιατί κάθε φορά που καλούμε την remove διατρέχουμε την λίστα από την αρχή. Είναι καλύτερα να χρησιμοποιήσουμε ένα iterator.

Ορισμός Hash. Map<Integer, Student> all. Students; Ορισμός class Student { private int AM; private

Ορισμός Hash. Map<Integer, Student> all. Students; Ορισμός class Student { private int AM; private Hash. Map<Integer, Student. Record> courses; . . . pubic Hash. Map<Integer, Student. Record> get. Courses{ return courses; } } Ορισμός class Student. Record { private double grade; . . . public double get. Grade{ return grade; } } Χρήση all. Students. get(469). get. Courses(). get(205). get. Grade() ;

import java. util. *; class Array. Hash. Comparison { public static void main(String[] args){

import java. util. *; class Array. Hash. Comparison { public static void main(String[] args){ Array. List<Integer> array = new Array. List<Integer>(); for (int i =0; i < 100000; i ++){ array. add(i); } Hash. Set<Integer> set = new Hash. Set<Integer>(); for (int i =0; i < 100000; i ++){ set. add(i); } Array. List<Integer> random. Numbers = new Array. List<Integer>(); Random rand = new Random(); for (int i = 0; i < 100000; i ++){ random. Numbers. add(rand. next. Int(200000 )); } long start. Time = System. current. Time. Millis(); for (Integer x: random. Numbers){ Με το Array. List κάνουμε περίπου boolean b = array. contains(x); 100000*100000/2 συγκρίσεις } long end. Time = System. current. Time. Millis(); long duration = (end. Time - start. Time); System. out. println("Array took "+ duration + " millisecs"); start. Time = System. current. Time. Millis(); for (Integer x: random. Numbers){ Με το Hash. Set κάνουμε boolean b = set. contains(x); 100000 συγκρίσεις } end. Time = System. current. Time. Millis(); duration = (end. Time - start. Time); System. out. println("Set took "+duration + " millisecs "); } } περίπου