Simple Neural Network in Java
Since you didn't post the code of Neuron, InputNeuron and OutputNeuron so I just give some comments on the style.

Instance variables

private HashMap&lt;String,InputNeuron&gt; inputNeurons;
private LinkedList&lt;Neuron&gt; internalNeurons;
private LinkedList&lt;OutputNeuron&gt; outputNeurons;


Instance variables should be kept private and expose via methods.

Ps: I'm not sure here if you intended to let them package-private for other classess (e.g Neuron, etc) to access them directly.

Prefer reference to objects by their interfaces

It is considered a good practice to reference to objects by their interfaces rather than concrete implementation (if they have one). Here you are using the Collection Framework so it'd be better if you declared the instance variables via interfaces.

private Map&lt;String,InputNeuron&gt; inputNeurons;
private List&lt;Neuron&gt; internalNeurons;
private List&lt;OutputNeuron&gt; outputNeurons;


Make defensive copies

The constructor of NeuronNetwork uses directly the arguments passed to it which could lead to some subtle bugs. It'd be better if you make a copy of those arguments.

public NeuralNetwork(Map&lt;String,InputNeuron&gt; inputNeurons, List&lt;Neuron&gt; internalNeurons,
        List&lt;OutputNeuron&gt; outputNeurons) {
    this.inputNeurons = new HashMap&lt;String, InputNeuron&gt;(inputNeurons);
    this.internalNeurons = new ArrayList&lt;Neuron&gt;(internalNeurons);
    this.outputNeurons = new ArrayList(outputNeurons);
    this.outputNeurons.get(0).getOutput(); // potential IndexOutOfBoundException
}


The last line in the constructor could cause IndexOutOfBoundException if the outputNeurons is empty. I'm not sure the purpose of this line.

Avoid using array as return type if possible

The method timeStep returns an int[] which is an array. IMO this is not good since array is  less convenience and doesn't provides much useful behaviors. Returning a Collection or a  List would be a better choice.

public Collection&lt;Integer&gt; timestep(List&lt;String&gt; inputs) {
    System.out.println("Network: timestep: " + timestep);

    for (String inp : inputs) {
        assert inputNeurons.get(inp) != null : "timestep was given a String as key for an InputNeuron that didn't exist";
        inputNeurons.get(inp).fire();
    }

    for (Neuron internal : internalNeurons) {
        internal.nextTimestep();
    }

    for (Neuron outputNeuron : outputNeurons) {
        outputNeuron.nextTimestep();
    }

    List&lt;Integer&gt; output = new ArrayList&lt;Integer&gt;(outputNeurons.size());
    for (OutputNeuron outputNeuron : outputNeurons) {
        output.add(outputNeuron.getOutput());
    }

    timestep++;
    resetAll();
    return output;
}


Misc

You could rename the method getNrTimestep() to getTimestep() for more elegant.

That's it. Hope these could help.