List类型本身是可以存放任何对象的,也就是只要是数据都可以存储的。
如:List.add(new Object());这个语句是不会报错的。由于Object是任何对象的父类,所以任何的子对象都是可以被List通过add方法进行存放的。
‘贰’ list,map,set三个接口存储元素时各有什么特点
(一)List
1、可以允许重复的对象。
2、可以插入多个null元素。
3、是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
4、常用的实现类有ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。
(二)Set
1、不允许重复对象。
2、无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable。
3、只允许一个 null 元素。
4、Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet。
(三)map
1、Map不是collection的子接口或者实现类。Map是一个接口。
2、Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。
3.、TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。
4.、Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
5、Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)。
(2)汇编的list存储格式扩展阅读
list和set、map之间的转化方式:
1、list转成set集合
Set<Student>
studentSet=studentList.stream().map(Student::getId).collect(Collectors.toSet());
2、list转成map
Map<String,Student>
studentMap=studentList.stream().collect(Collectors.toMap(Student::getId,a -> a,(k1,k2)->k1));
3、list转成map并且根据student中的name进行分组
Map<String,List<Student>>
group=studentList.stream().collect(Collectors.groupingBy(Student::getName));