ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 概述 有序的collection(也称为序列) . 此接口的用户可以对列表中每个元素的掺入位置进行精确的控制 .用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素 . ### 特点 * 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的) . * 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理) . * 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。 ### 常用子类 1. ArrayList集合,底层是数组结构. 2. LinkedList集合,底层是链表结构. ### 方法 #### add(index , element) 将元素插入到列表指定索引上. 索引的插入得按序插入 . ~~~ List<String> list = new ArrayList<String>(); list.add("abc"); list.add("cba"); list.add("123"); Iterator<String> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } ~~~ #### remove(index) 移除指定索引上的元素 ,返回E类型 ,其实就是返回被删除的元素 . ~~~ List<String> list = new ArrayList<String>(); list.add("abc"); list.add("123"); System.out.println(list.remove(1)); System.out.println(list); ~~~ 结果 ~~~ 123 [abc] ~~~ #### set(index) 修改指定索引上的值 , 并返回修改之前的值 ~~~ List<String> list = new ArrayList<String>(); list.add("abc"); list.add("123"); System.out.println(list.set(1,"cba")); System.out.println(list); ~~~ 结果 ~~~ 123 [abc, cba] ~~~ ### 堆栈: * 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。 * 栈的入口、出口的都是栈的顶端位置 . * 压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。 * 弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。 ![](https://box.kancloud.cn/f4992677bb4eadf0a11bb6093304b84f_746x702.png) ### 队列: * 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,安检。排成一列,每个人依次检查,只有前面的人全部检查完毕后,才能排到当前的人进行检查。 * 队列的入口、出口各占一侧。例如,下图中的左侧为入口,右侧为出口。 ![](https://box.kancloud.cn/32dfbce89604fa0e776940f682436d47_806x666.png) ### 数组 * 查找元素快:通过索引,可以快速访问指定位置的元素 . * 增删元素慢 : * 指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,复制到新数组对应索引的位置 . * 指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复制到新数组对应索引的位置,原数组中指定索引位置元素不复制到新数组中 . ![](https://box.kancloud.cn/1b62b4bd1f4fc2c07593ddf9935b29e5_776x828.png) ### 链表: * 多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。 * 查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素 . * 增删元素快: * 增加元素:操作如左图,只需要修改连接下个元素的地址即可。 * 删除元素:操作如右图,只需要修改连接下个元素的地址即可。 ![](https://box.kancloud.cn/e9c8246ca2e3518b05f4d6796c34aee3_842x630.png) 一般数组用的比较多,因为项目中80%的业务都是做查询,检索 .