Download Big Java - Colorado School of Mines

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Collections of Data
SETS AND MAPS
Advanced Data Structures
Often referred to as the Java Collections
Framework….
•
•
•
•
•
Set and map data types
Hash tables
Binary trees
Heap
Priority queue
We will only discuss Set and Map
Sets
• Unordered collection
• Fundamental operations:
–
–
–
–
Add an element
Remove an element
Containment test (is object in set?)
List elements (in arbitrary order)
• Reject duplicates
Set Implementation
<<interface>>
Set
HashSet
TreeSet
UML reminder: dotted line, open
triangle pointing to interface
add(E)
addAll(Collection)
clear()
contains(Object)
containsAll(Collection)
equals(Object)
hashCode()
isEmpty()
iterator()
remove(Object)
removeAll(Collection)
retainAll(Collection)
size()
toArray()
toArray(T[])
Simple SetDemo
import java.util.*;
public class SetDemo {
instantiate with specific
private Set<String> animals; implementation.
Advantage: could easily
change implementation,
rest of program stays the
same.
public SetDemo() {
animals = new HashSet<String>();
}
public void printAnimals(){
for (String animal : animals)
System.out.println(animal);
Nodes are not
}
necessarily visited
in order inserted!
Add input and main methods
can use methods from
public void getAnimals() {
interface, such as add. Also
Scanner in = new Scanner(System.in);
have remove, contains,
String animal = "";
clear, size and more
do {
System.out.print("Enter an animal or Q to quit: ");
animal = in.next();
if (!(animal.equalsIgnoreCase("Q")))
animals.add(animal);
} while (!(animal.equalsIgnoreCase("Q")));
}
public static void main(String[] args) {
SetDemo demo = new SetDemo();
demo.getAnimals();
demo.printAnimals();
}
}
TRY: giraffe, bear, coyote, lion
Maps
• A map data type keeps associations between
keys and values
• Cannot contain duplicate keys
• Operations include:
–
–
–
–
–
put
get
containsKey/containsValue
keySet/values – return all keys/values
size
• Java has two implementations: HashMap and
TreeMap.
Map Demo
import java.util.*;
public class MapDemo {
Map<String, Integer> sightings;
public MapDemo() {
sightings = new HashMap<String, Integer>();
}
public void loadSightings() {
sightings.put("fox", 10);
sightings.put("bear", 2);
sightings.put("deer", 60);
sightings.put("elk", 30);
}
public void printSightings() {
Set<String> keySet = sightings.keySet();
for (String key : keySet)
System.out.println(key + "->" + sightings.get(key));
}
public static void main(String[] args) {
MapDemo demo = new MapDemo();
demo.loadSightings();
demo.printSightings();
}
}
TreeSet or HashSet?
• With a good hash function, hashing is usually faster
• Balanced trees (remember those?) can guarantee
reasonable performance, HashSet depends entirely on
performance of hash function
• To use TreeSet, objects being stored must implement
Comparable interface
• For TreeMap, same requirement for keys
• Can supply a Comparator object to TreeSet/TreeMap
constructor (takes two objects and returns comparison)
• TreeSet is preferable if want to print list of items in order
TreeSet needs Comparable items
public class Student implements Comparable<Student>{
private String name;
public Student(String name) {
super();
this.name = name;
}
// Include setters and getters
public int compareTo(Student other) {
return name.compareTo(other.name);
}
}
TreeSet Example
public class StudentSet {
private Set<Student> students;
public StudentSet() {
students = new
HashSet<Student>();
}
public void addStudent(Student s) {
students.add(s);
}
public void displayStudents() {
for (Student s : students) {
System.out.println(s.getName());
}
}
public static void
main(String[] args) {
StudentSet set = new
StudentSet();
set.addStudent(new
Student("Cyndi"));
set.addStudent(new
Student("Bill"));
set.addStudent(new
Student("Jane"));
set.displayStudents();
}
}