1、用法
List:存储一系列相关的元素。
Set:存储的元素具有唯一性,唯一性由hashCode和equals方法保证。
Map:存储的元素具有一一对应关系(k-v),通过k获取v。
案例示意:
有一个对象为:
java
public class Student {
String name ;//姓名
int age ;//年龄
int sex ;//性别
int classId ;//班级
}
现在有大量的Student对象,我们需要暂时存储,就可以使用List
如果其中存在重复数据,我们可以使用Set,Set会自动去重
如果需要根据classId字段来进行分类,这时可以使用Map,对应关系为classId-List<Student>
2、使用场景
2.1 List
在JAVA中,List接口有三个常用实现类,分别是ArrayList、LinkedList和Vector。
- ArrayList最为常用,在没有特殊要求下,都可以使用。
- LinkedList用于存储对顺序有要求的数据,其内部为双向链表结构。
- Vector在多线程环境下使用,其内部用synchronized做线程安全,但功能与ArrayList无异。
2.2 Set
Set接口有两个常用实现类,分别是HashSet、LinkedHashSet和TreeSet。
- HashSet可以用于对数据的去重处理,其底层实现基于HashMap。所以判断是否为同一对象,依赖于hashcode和equals方法,要根据使用场景灵活重写。
- LinkedHashSet用于存储对顺序有要求的数据。
- TreeSet可以用于对集合内部数据的排序。
2.3 Map
Map接口有三个常用实现类,分别是HashMap、LinkedHashMap和TreeMap。
- HashMap和ArrayList一样,没有特殊要求就用它。
- LinkedHashMap存放对顺序有要求的数据。
- TreeMap可以对存放的数据进行排序。
3、注意事项
- 具体使用哪一个集合要根据使用场景来判断,不能随意使用。
- List、Set和Map都有各自长用的集合类,要注意区分使用细节。
- Set的遍历依赖于stream、增强for和迭代器。
- 以上的Map和Set都要注意对hashcode和equals方法的重写,这是立身根本。