private Map<Integer, Double> getSimResources(int userID, int resID) {
		Map<Integer, Double> resources = new LinkedHashMap<Integer, Double>();
		// get all resources that have been tagged by the user
		for (UserData data : this.trainList) {
			if (data.getWikiID() != resID) {
				if (userID == -1) {
					resources.put(data.getWikiID(), 0.0);
				} else if (data.getUserID() == userID) {
					resources.put(data.getWikiID(), 0.0);
				}
			}
		}
		// if list is empty, use all users		
		if (resources.size() == 0) {
			for (UserData data : this.trainList) {
				resources.put(data.getWikiID(), 0.0);
			}
		}
		
		if (resID < this.resMaps.size()) {
			Map<Integer, Integer> targetMap = this.resMaps.get(resID);
			for (Map.Entry<Integer, Double> entry : resources.entrySet()) {
				double bm25Value = Utilities.getJaccardSim(targetMap, this.resMaps.get(entry.getKey()));
				entry.setValue(bm25Value);
			}
			
			// return the sorted neighbors
			Map<Integer, Double> sortedResources = new TreeMap<Integer, Double>(new DoubleMapComparator(resources));
			sortedResources.putAll(resources);
			return sortedResources;
		}
		return resources;
	}