001: /**
002: * com.mckoi.util.HashMapList 02 Oct 2000
003: *
004: * Mckoi SQL Database ( http://www.mckoi.com/database )
005: * Copyright (C) 2000, 2001, 2002 Diehl and Associates, Inc.
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * Version 2 as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License Version 2 for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * Version 2 along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
019: *
020: * Change Log:
021: *
022: *
023: */package com.mckoi.util;
024:
025: import java.util.*;
026:
027: /**
028: * A HashMap that maps from a source to a list of items for that source. This
029: * is useful as a searching mechanism where the list of searched items are
030: * catagorised in the mapped list.
031: *
032: * @author Tobias Downer
033: */
034:
035: public class HashMapList {
036:
037: private static final List EMPTY_LIST = Arrays.asList(new Object[0]);
038:
039: private HashMap map;
040:
041: /**
042: * Constructs the map.
043: */
044: public HashMapList() {
045: map = new HashMap();
046: }
047:
048: /**
049: * Puts a value into the map list.
050: */
051: public void put(Object key, Object val) {
052: ArrayList list = (ArrayList) map.get(key);
053: if (list == null) {
054: list = new ArrayList();
055: }
056: list.add(val);
057: map.put(key, list);
058: }
059:
060: /**
061: * Returns the list of values that are in the map under this key. Returns
062: * an empty list if no key map found.
063: */
064: public List get(Object key) {
065: ArrayList list = (ArrayList) map.get(key);
066: if (list != null) {
067: return list;
068: }
069: return EMPTY_LIST;
070: }
071:
072: /**
073: * Removes the given value from the list with the given key.
074: */
075: public boolean remove(Object key, Object val) {
076: ArrayList list = (ArrayList) map.get(key);
077: if (list == null) {
078: return false;
079: }
080: boolean status = list.remove(val);
081: if (list.size() == 0) {
082: map.remove(key);
083: }
084: return status;
085: }
086:
087: /**
088: * Clears the all the values for the given key. Returns the List of
089: * items that were stored under this key.
090: */
091: public List clear(Object key) {
092: ArrayList list = (ArrayList) map.remove(key);
093: if (list == null) {
094: return new ArrayList();
095: }
096: return list;
097: }
098:
099: /**
100: * The Set of all keys.
101: */
102: public Set keySet() {
103: return map.keySet();
104: }
105:
106: /**
107: * Returns true if the map contains the key.
108: */
109: public boolean containsKey(Object key) {
110: return map.containsKey(key);
111: }
112:
113: }
|