I've read that when you define a {Map, Set, Etc} it is good practice use the interface name as so:
Map<Integer, String> map = new LinkedHashMap<Integer, String>();
instead of:
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
I'm not sure why this is, but I've put it to practice in hopes I will understand at a later time. Maybe that time has come.
So I create a class that defines one and create a getter for the Map:
class Data{
    private Map<Integer, String> map;
    public Data(){
        map = new LinkedHashMap<Integer, String>();
        //dynamically put some things into the map
    }
    public Map<Integer, String> getMap(){
        return map;
    }
}
Now I come to my first impasse.  I can't return a LinkedHashMap, I have to return a Map.
So in another class I get that Map
class Foo{
    public Foo{
        Data data = new Data();
        Map<Integer, String> map = data.getMap();
    }
}
map when it gets passed?LinkedHashMap?Map if, after calling getData(), I put something in the Map?Is my method of getting the map done in ignorance?
map public? 
     
     
    