package tl1.A4; import java.util.Map; import java.util.Set; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.Iterator; import java.util.Stack; public class InvertedListImpl implements InvertedList { private HashMap List; // Wörter mapped auf LinkedLists public Map getMap() { return List; } public void addDocument(String filename, Map termsPlusFreqs) { Set terms = termsPlusFreqs.keySet(); // Set aus Map erstellen for (Iterator it = terms.iterator(); it.hasNext();) { // Jeden // schlüssel // Überprüfen String subject = (String) it.next(); // Name rausholen int freq = (Integer) termsPlusFreqs.get(subject); boolean tester = false; // Liste erstellen falls nicht vorhanden! if (List == null) { List = new HashMap(); } if (!List.isEmpty()) tester = true; if (List.containsKey(subject) && tester) { // bereits in List // enthalten LinkedList temp = (LinkedList) List.get(subject); List.remove(subject); // Löschen temp.add(new InvertedListEntry(filename, freq)); List.put(subject, temp); } else { LinkedList temp = new LinkedList(); temp.add(new InvertedListEntry(filename, freq)); List.put(subject, temp); } } } public int getFrequency(String filename, String term) { LinkedList temp = (LinkedList) List.get(term); if (temp != null) { for (Iterator it = temp.listIterator(); it.hasNext();) { InvertedListEntry IE = (InvertedListEntry) it.next(); if (IE.getFilename().equals(filename)) { return IE.getFrequency(); } } } return 0; } public int getNumberOfDocuments(String term) { LinkedList IL = (LinkedList) List.get(term); return IL.size(); } public Set getOccurences(String term, int minOccurence) { LinkedList IL = (LinkedList) List.get(term); Set toReturn = new HashSet(); for(Iterator it = IL.listIterator(); it.hasNext();){ InvertedListEntry temp = (InvertedListEntry)it.next(); if(temp.getFrequency()>= minOccurence){ toReturn.add(temp.getFilename()); } } return toReturn; } public void removeDocument(String filename) { Set keys = List.keySet(); Stack teststack = new Stack(); for (Iterator it = keys.iterator(); it.hasNext();) { String name = (String) it.next(); LinkedList IL = (LinkedList) List.get(name); for (Iterator it2 = IL.listIterator(); it2.hasNext();) { InvertedListEntry temp = (InvertedListEntry)it2.next(); if (temp.getFilename().equals(filename)){ //sobald gefunden teststack.push(temp); } } while(!teststack.empty()){ IL.remove(teststack.pop()); } } } }