前面介绍了集合与映射两类容器,它们的共同特点是每个元素都是唯一的,并且采用二叉树方式的类型还自带有序性。然而这两个特点也存在弊端:其一,为啥内部元素必须是唯一的呢?像手机店卖出了两部Mate20,虽然这两部手机一模一样,但理应保存两条销售记录才是。其二,不管是哈希类型还是二叉类型,居然都不允许按照加入时间的先后排序,要知道现实生活中不乏各种先来后到的业务场景。为了更方便地应对真实场景中的各类需求,Java又设计了清单List这么一种容器,用来处理集合与映射所不支持的业务功能。
提到清单,脑海里顿时浮现出从上往下排列的一组表格,例如购物清单、愿望清单、待办事项等等,它们的共同点一是都有序号,二是按线性排列。清单里的元素允许重复加入,并且根据入伙的时间顺序先后罗列,这些特征决定了清单是种贴近日常生活的简易容器。不过Java中的List属于接口,实际开发用到的是它的一个实现类ArrayList(列表,又称动态数组)。在某种程度上,列表的确跟数组很像,比如二者的内部元素都分配了整数序号/下标、都支持通过序号/下标来访问指定位置的元素等等。但列表贵为容器中的一员,自然拥有几点数组所不能比拟的优势,包括但不限于:
一、列表允许动态添加新元素,不管调用多少次add方法,也不必担心列表空间不够用的问题。下面代码便演示了如何声明列表实例并对其依次添加元素:
ArrayList<MobilePhone> list = new ArrayList<MobilePhone>();
list.add(new MobilePhone("华为", 5000)); // 第一个添加的元素,默认分配序号为0
list.add(new MobilePhone("