get() 获取、set() 修改指定索引元素需索引合法(0 ≤ index < size()),否则抛 IndexOutOfBoundsException;get() 返回元素(含 null),set() 替换并返回旧值,不改变长度;空列表时任何索引均越界。

用 get() 获取、set() 修改指定索引位置的元素,前提是索引合法——即在 0 到 size() - 1 范围内,否则会抛出 IndexOutOfBoundsException。
获取指定索引位置的元素
调用 list.get(index) 直接返回该位置的元素值。
- 索引从 0 开始,比如
list.get(0)取第一个元素 - 即使元素本身是
null,get()也正常返回,不报错 - 若
index < 0或index >= list.size(),运行时立即抛异常 - 空列表(
size() == 0)时,任何索引(包括0)都会越界
修改指定索引位置的元素
调用 list.set(index, element) 替换原位置的值,返回被替换的旧元素。
- 不会改变列表长度,只是“就地更新”
- 新值可以为
null,例如list.set(1, null)是合法操作 - 同样要求索引有效,越界行为与
get()一致 - 注意:这不是插入,
add(int index, E e)才会在指定位置插入并移动后续元素
安全访问的实用建议
避免因外部输入或计算错误导致越界,推荐提前校验。
- 手动检查:
if (index >= 0 && index - 封装工具方法,如
safeGet(list, index, defaultValue),越界时返回默认值 - 对用户输入、配置文件读取的索引,务必做范围验证,不盲目信任
常见误区提醒
几个容易混淆的点需要特别注意:
-
set()和add(int index, E e)功能不同:前者替换,后者插入 -
get()和set()都不能用于空列表的任意索引,哪怕index == 0 - 想根据元素值找索引,要用
indexOf(Object o),它返回第一次出现的位置,找不到则返回-1 - 不要把循环变量
i当作元素值去调indexOf(i),那查的是值i的位置,不是当前下标


















