List集合
Collection 层次结构中的根接口。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List、Queue)实现。 我们掌握了Collection接口的使用后,再来看看Collection接口中的子接口,他们都具备那些特性呢?
1.1 List接口介绍java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。
List接口特点:
- 
List集合所有的元素是以一种线性方式进行存储的,例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)
 - 
它是一个元素存取有序的集合。即元素的存入顺序和取出顺序有保证。
 - 
它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
 - 
集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
 
List集合类中元素有序、且可重复。这就像银行门口客服,给每一个来办理业务的客户分配序号:第一个来的是“张三”,客服给他分配的是0;第二个来的是“李四”,客服给他分配的1;以此类推,最后一个序号应该是“总人数-1”。
注意:
List集合关心元素是否有序,而不关心是否重复,请大家记住这个原则。例如“张三”可以领取两个号。
1.2 List接口中常用方法List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法,如下:
List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法。
1、添加元素
- 
void add(int index, E ele)
 - 
boolean addAll(int index, Collection<? extends E> eles)
 
2、获取元素
- 
E get(int index)
 - 
List subList(int fromIndex, int toIndex)
 
3、获取元素索引
- 
int indexOf(Object obj)
 - 
int lastIndexOf(Object obj)
 
4、删除和替换元素
- 
E remove(int index)
 - 
E set(int index, E ele)
 
List集合特有的方法都是跟索引相关:
 package com.atguigu.list;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class TestListMethod {
     public static void main(String[] args) {
         // 创建List集合对象
         List<String> list = new ArrayList<String>();
 
         // 往 尾部添加 指定元素
         list.add("图图");
         list.add("小美");
         list.add("不高兴");
 
         System.out.println(list);
         // add(int index,String s) 往指定位置添加
         list.add(1,"没头脑");
 
         System.out.println(list);
         // String remove(int index) 删除指定位置元素  返回被删除元素
         // 删除索引位置为2的元素
         System.out.println("删除索引位置为2的元素");
         System.out.println(list.remove(2));
 
         System.out.println(list);
 
         // String set(int index,String s)
         // 在指定位置 进行 元素替代(改)
         // 修改指定位置元素
         list.set(0, "三毛");
         System.out.println(list);
 
         // String get(int index)  获取指定位置元素
         // 跟size() 方法一起用  来 遍历的
         for(int i = 0;i<list.size();i++){
             System.out.println(list.get(i));
         }
         //还可以使用增强for
         for (String string : list) {
             System.out.println(string);
         }
     }
 }
1.3 List接口的实现类们在JavaSE中List名称的类型有两个,一个是java.util.List集合接口,一个是java.awt.List图形界面的组件,别导错包了。
List接口的实现类有很多,常见的有:
ArrayList:动态数组
Vector:动态数组
LinkedList:双向链表
当然,还有很多List接口的实现类这里没有列出来,基础阶段先了解这几个。
1.4 动态数组逻辑结构特点:线性结构
物理结构特点:
- 
申请内存:一次申请一大段连续的空间,一旦申请到了,内存就固定了。
 - 
 
