JAVA SETS AND MAPS - University of Richmond

12
JAVA SETS AND MAPS

Transcript of JAVA SETS AND MAPS - University of Richmond

Page 1: JAVA SETS AND MAPS - University of Richmond

JAVA SETS AND MAPS

Page 2: JAVA SETS AND MAPS - University of Richmond

EXPERIMENTAL ANALYSIS

• We should run an experiment to compare our various implementations

• I have collected data for adding 𝑛 doubles (as keys) to maps and sorted

maps to help analyze

• This is not comprehensive, just one view of our options

• Added random data that did not "overlap", again a limited view

• What conclusions do you draw?

Page 3: JAVA SETS AND MAPS - University of Richmond

EXPERIMENTAL ANALYSISMAP ADT IMPLEMENTATIONS

1.00E-08

1.00E-07

1.00E-06

1.00E-05

1.00E-04

1.00E-03

1.00E-02

1.00E-01

1.00E+00

1.00E+01

1 4 16 64 256 1024 4096 16384 65536 262144 1048576 4194304

Tim

e

Size

UnsortedTableMap ProbeHashMap ChainHashMap JavaHashMap

Page 4: JAVA SETS AND MAPS - University of Richmond

EXPERIMENTAL ANALYSISSORTED MAP ADT IMPLEMENTATIONS

1.00E-07

1.00E-06

1.00E-05

1.00E-04

1.00E-03

1.00E-02

1.00E-01

1.00E+00

1 4 16 64 256 1024 4096 16384 65536 262144

Tim

e

Size

SortedTableMap TreeMap JavaTreeMap

Page 5: JAVA SETS AND MAPS - University of Richmond

SUMMARY OF CLASSES (SETS)

• EnumSet<E> - Specialized set for

enumerated types. Implemented as bit-

vector.

• HashSet<E> - Set implemented with

chained hash table – no guaranteed

iteration order

• LinkedHashSet<E> - Same, but with

guaranteed iteration order. No complexity

overhead

• E should override both hashCode() and

equals()! Default hashCode() hashes

memory address of object (typically, not always)

and default equals() compares memory

address

• TreeSet<E> - Set implemeneted with

red-black tree. Needs Comparator<E>

or E should implement Comparable<E>

• There are no multisets in the Java library.

Some external libraries have them.

• To find how to use them, go to the Java API!

Page 6: JAVA SETS AND MAPS - University of Richmond

Object

AbstractCollection<E>

AbstractSet<E>

EnumSet<E> HashSet<E>

LinkedHashSet<E>

TreeSet<E>

Iterable<E>

Collection<E>

Set<E>

SortedSet<E>

NavigableSet<E>

Interfaces

Classes

Page 7: JAVA SETS AND MAPS - University of Richmond

EXAMPLE OF USING SET<E>

1.Scanner s = new Scanner(new File(“numbers.txt”));

2.HashSet<Integer> numbers = new HashSet<>();

3.while(s.hasNextInt())

4. numbers.add(s.nextInt());

5.…elsewhere…

6.int sumOfUnique = 0;

7.for(Integer i : numbers)

8. sum += i;

Page 8: JAVA SETS AND MAPS - University of Richmond

EXAMPLE OF OVERRIDING HASCODE()

1. public class Student {

2. String id; //unique!

3. String name;

4. List<Courses> courses;

5. …stuff…

6. public boolean equals(Object obj) {

7. if(obj != null && obj instanceof Student)

8. return id.equals(((Student)obj).id);

9. return false;

10. }

11. public int hashCode() {

12. return id.hashCode();

13. }

14. }

Really great stackoverflow answer

about creating hash codes.

Page 9: JAVA SETS AND MAPS - University of Richmond

SUMMARY OF CLASSES (MAPS)

• EnumMap<K,V> - Specialized set for

enumerated types. Implemented as bit-

vector.

• HashMap<K,V> - Set implemented with

chained hash table – no guaranteed

iteration order

• LinkedHashMap<K,V> - Same, but with

guaranteed iteration order. No complexity

overhead

• K should override both hashCode() and

equals()! Default hashCode() hashes

memory address of object (typically, not always)

and default equals() compares memory

address

• TreeMap<K,V> - Set implemeneted with

red-black tree. Needs Comparator<K>

or K should implement Comparable<K>

• IdentityHashMap<K,V> - hash map

specifically for objects that use reference

equality instead of object equality

• WeakHashMap<K,V> - Like a hash map,

but does not prevent garbage collector

from removing keys

• There are no multisets in the Java library.

Can fake with Map<K, List<V>>

• To find how to use them, go to the Java API!

Page 10: JAVA SETS AND MAPS - University of Richmond

Object

AbstractMap<K,V>

EnumMap<K,V> HashMap<K,V>

LinkedHashMap<K,V>

TreeMap<K,V>

IdentityHashMap<K,V> WeakHashMap<K,V>

Map<K,V>

SortedMap<E>

NavigableMap<E>

Interfaces

Classes

Page 11: JAVA SETS AND MAPS - University of Richmond

EXAMPLE OF USING MAP<K,V>

1.Scanner s = new Scanner(new File(“numbers.txt”));

2.HashMap<Integer,String> numbers = new HashMap<>();

3.while(s.hasNextInt())

4. numbers.put(s.nextInt(),s.next());

5.…elsewhere…

6.System.out.println(numbers.get(5)); //get a value

Page 12: JAVA SETS AND MAPS - University of Richmond

PROBLEM

• Design a barcode scanner for a super market

• You are given an inventory (item barcode, per unit cost, and quantity per item) of the

store (file online)

• Let a customer come with a shopping list (you design file format)

• Look up in the inventory database for each items availability

• If possible to purchase subtract the quantity from the inventory

• If the item is purchased, add the price to the total

• Print a receipt for the purchase

• What will be the underlying container for your database?