public Neighbors getNeighbors(Object vertex) {
	  if(!isVertex(vertex)) {
		  return null;
	  }
	  
	  Neighbors vertexNeighbors = new Neighbors();
	  
	  try { 

	  // get the VertexNode and degree counted associated with the given vertex
	  VertexNode vertexNode = (VertexNode) ((DListNode) vertexHashTable.find(vertex).value()).item();
	  int vertexDegreeCount = vertexNode.getDegreeCount();
	  
	  // create two empty arrays for the Neighbor class that have the same number of indices as the degree of the given vertex
	  vertexNeighbors.neighborList = new Object[vertexDegreeCount];
	  vertexNeighbors.weightList = new int[vertexDegreeCount];
	  
	  if(vertexDegreeCount == 0) { // if the vertex has no edges, then we return null 
		  return null;
	  }
	  
	  // loop through edges of the given vertex
	  DListNode pointer = (DListNode) vertexNode.getEdgeList().front();

	  for(int i = 0; i < vertexDegreeCount; i++) {
		
		 EdgeNode edgeNode = (EdgeNode) pointer.item();

		 vertexNeighbors.weightList[i] =  edgeNode.getWeight(); // set the weightList

		 // set the neighborList
		 if(edgeNode.getEdgeType() == EdgeNode.SELF) { // self edge case
			 Object appVertex1 = ((VertexNode) edgeNode.getVertexOne().item()).getAppVertex();
			 vertexNeighbors.neighborList[i] =  appVertex1;
		 } else { // non self edge case
			 Object appVertex1 = ((VertexNode) edgeNode.getVertexOne().item()).getAppVertex();
			 Object appVertex2 = ((VertexNode) edgeNode.getVertexTwo().item()).getAppVertex();
			 // make sure we're adding the vertex's neighbor, and not itself
			 if(!appVertex1.equals(vertex)) {
				 vertexNeighbors.neighborList[i] = appVertex1;
			 } else if(!appVertex2.equals(vertex)) {
				 vertexNeighbors.neighborList[i] = appVertex2;
			 }
		 }
		 pointer = (DListNode) pointer.next();
				  
	  }
	  return vertexNeighbors;
	  } catch (InvalidNodeException e) {}
	  
	  return vertexNeighbors;
  }