private Map<Integer, Double> getNeighbors(int userID, int resID) {
		Map<Integer, Double> neighbors = new LinkedHashMap<Integer, Double>();
		//List<Map<Integer, Integer>> neighborMaps = new ArrayList<Map<Integer, Integer>>();
		// get all users that have tagged the resource
		for (UserData data : this.trainList) {
			if (data.getUserID() != userID) {
				if (resID == -1) {
					neighbors.put(data.getUserID(), 0.0);
				} else if (data.getWikiID() == resID) {
					neighbors.put(data.getUserID(), 0.0);
				}
			}
		}
		//boolean allUsers = false;
		// if list is empty, use all users		
		if (neighbors.size() == 0) {
			//allUsers = true;
			for (UserData data : this.trainList) {
				neighbors.put(data.getUserID(), 0.0);
			}
		}
		
		//for (int id : neighbors.keySet()) {
		//	neighborMaps.add(this.userMaps.get(id));
		//}
		if (userID < this.userMaps.size()) {
			Map<Integer, Integer> targetMap = this.userMaps.get(userID);
			//double lAverage = getLAverage(neighborMaps);
			for (Map.Entry<Integer, Double> entry : neighbors.entrySet()) {
				double bm25Value = /*allUsers ? */Utilities.getJaccardSim(targetMap, this.userMaps.get(entry.getKey()));// :
				//	getBM25Value(neighborMaps, lAverage, targetMap, this.userMaps.get(entry.getKey()));
				entry.setValue(bm25Value);
			}
			
			// return the sorted neighbors
			Map<Integer, Double> sortedNeighbors = new TreeMap<Integer, Double>(new DoubleMapComparator(neighbors));
			sortedNeighbors.putAll(neighbors);
			return sortedNeighbors;
		}
		return neighbors;
	}