hashmap的bug

class UserSolution {

	
	

	class Node {
		int mId;
		int start;
		int end;
		boolean isDeleted;
		Node(int mId, int start, int end) {
			this.mId = mId;
			this.start = start;
			this.end = end;
		}
		
		
		public void setIsDeleted(boolean isDeleted) {
			this.isDeleted = isDeleted;
		}
		
	}
	
	class MyComparator implements Comparator {
		@Override
		public int compare(Node args1, Node args2) {
			if (args1.start == args2.start) {
				return args1.mId - args2.mId;
			}
			return args1.start - args2.start;
		}
	}
	
	int n;
	int m;
	TreeSet[] nodeSet;
	HashMap nodeMap = new HashMap<>();
	int[] exist;
	
	public void init(int N, int M)
	{
		n = N;
		m = M;
		exist = new int[50001];
		Arrays.fill(exist, -1);
		nodeSet = new TreeSet[N];
		nodeMap.clear();
		for (int i = 0; i < n; i++) {
			nodeSet[i] = new TreeSet<>(new MyComparator());
		}
		
		
		
	}

	public int writeWord(int mId, int mLen)
	{
		
		for (int i = 0; i < n; i++) {
			
			boolean flag = false;
			int lastEnd = 0;
			int endBegin = m;
			
			for (Node node : nodeSet[i]) {
				
				if (node.isDeleted == true) {
					continue;
				}
				
				int blank = node.start - lastEnd;
				if (blank - mLen >= 0) {
					nodeSet[i].add(new Node(mId, lastEnd, lastEnd + mLen));
					flag = true;
					break;
				}	
				lastEnd = node.end;
			}
			if (flag) {
				nodeMap.put(mId, i);
				exist[mId] = i;
				return i;
			}
			if (endBegin - lastEnd >= mLen) {
				nodeSet[i].add(new Node(mId, lastEnd, lastEnd + mLen));
				nodeMap.put(mId, i);
				exist[mId] = i;
				return i;
			}
			
			
			
			
		}
		
		return -1;
	}

	public int eraseWord(int mId)
	{
		Integer index = nodeMap.get(mId);
		
		if (index == null) {
			return -1;
		}
		
		nodeMap.remove(index);
		
		for (Node node : nodeSet[index]) {
			if (node.mId == mId) {
				node.setIsDeleted(true);
				exist[mId] = -1;
				return index;
			}
		}
		
		
		return -1;
	}

}

earseWord中不能一处index这个key,为什么??

你可能感兴趣的:(bug,java,算法)