1、什么是集合collection?
用我自己的理解来说,集合collection就是一个存放一组的数据或者类的一个容器,在这个容器中可以放相同的数据类型或者类类型,当然也可以放不同的数据类型或者类类型。
但是一旦在创建collection对象时确定了存放的数据类型就不能再更改,可是如果没有确定就可以存放不同数据类型,同时也会有一些方法使用的限制或者说是使用类的方法在存取是就会报错。
在java中collection是一个根接口,其实现子类或接口有很多,比如接口有List、Set、Vector;子类有ArrayList、LinkedList(这两个还继承了List接口)、HashSet(还继承了Set接口)。
必须通过一些具体的实现该接口的子类才能创建其对象使用类中的方法。
2、什么是Map?
我自己理解就是Map是一个特别的集合,在Map中存放的是一个个关系对或者说是对象,且该对象由键Key和值Value组成。
Key和Value的关系是一对映射;由key--->value的一对多映射关系。其中Key不可以重复,而Value可以重复,且一个Key只能对应一个Value值,一个Value可以由多个不同的Key值指向。
Map元素是无序的,每个元素是由键值对对象组成,该键值对对象在Map中有其中的内部类Entry定义,因此访问Value可以通过Key值直接访问,也可以通过Entry来直接访问Value。
实现Map接口的子类有HashMap、HashTable、LinkedHashMap(该类还继承了HashMap)
3、集合Collection和Map有哪些区别?
- 集合Collection是存储单元素,Map是储存键值对对象
- 集合Collection有储存可重复元素集合,比如LinkedList、ArrayList、Vector等,也有储存不可重复元素的集合,比如HashSet、LinkedHashSet等。而在Map中键(Key)是不可能有重复,值(Value)可以重复,换句话说就是一个键只能对应一个值,而相同的多个值可能对应多个键。
- Map使用对应的键(Key)查找对应的值,List集合默认是索引和值有对应关系,Set集合则无任何对应关系。
- Map中键和值是否可以为空要看实现那个子类,HashMap和LinkedHashMap键和值都能为空,但HashTable的键和值不能为空。
在HashTable对象中添加null值,不会有编译错误,会有运行错误(空指针异常)
HashMap<String,Integer> map1=new HashMap<>();
map1.put(null, null);
System.out.println(map1);
LinkedHashMap<String,Integer> map2=new LinkedHashMap<>();
map2.put(null, null);
System.out.println(map2);
Hashtable<String,Integer> map3=new Hashtable<>();
map3.put(null, null);
System.out.println(map3);
运行结果: