用于创建HashMap和TreeMap对象的不同语法

Nic*_*las 2 java object hashmap treemap

通常,当您创建一个对象时,您在前面提供了相同的类型,如:

Scanner scanner = new Scanner(System.in);
Run Code Online (Sandbox Code Playgroud)

但声明一个HashMap对象和TreeMap遵循这样的不同语法.

Map m1 = new HashMap();
SortedMap sm = new TreeMap();
Run Code Online (Sandbox Code Playgroud)

是什么原因?我问我的教授.但他不知道答案.

Jon*_*eet 5

但声明一个HashMap对象和TreeMap遵循这样的不同语法.

你不具备对.你可以写:

HashMap<String, Integer> map = new HashMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)

......只是你通常不这样做.

同样你可以写:

Object scanner = new Scanner(System.in);
Run Code Online (Sandbox Code Playgroud)

基本上,涉及两种类型:

  • 您要声明的变量的类型
  • 您正在调用其构造函数的类型

它们不必相同,但构造的类型必须与变量类型兼容.它必须是类所支持的超类或接口.仅将Map(或List或其他)变量指定为接口类型的观点是,大多数代码应仅将其视为map/list/set/whatever.事实上,它恰好是一个HashMap(或ArrayList等等),是一个实现细节.

有关此内容的更多详细信息,请参阅"编程到接口" ...但请注意两种情况下的语法相同:

VariableType variableName = new ActualTypeBeingConstructed();
Run Code Online (Sandbox Code Playgroud)

我问我的教授.但他不知道答案.

这吓到我了......