List接口及其相关
List中数据可以重复
List中数据的存取有顺序
List接口方法
get() 指定索引对象. 索引值不能超过size大小
set() 对指定索引位置进行对象替换
insert() 对指定索引位置进行插入
remove() 对指定索引位置对象移除
indexOf() 返回指定对象首次出现的索引值
lastIndexOf() 返回指定对象最后一次出现的索引值
subList() 截取子集合, 结束索引不包括(前闭后开)
public static void listMethods() { List list = new ArrayList(); list.add("abc"); list.add("dd"); list.add("aa"); list.add("cc"); list.add("dd"); // get() 指定索引获取对象 索引值不能超过size大小 Object o = list.get(1); System.out.println("获取对象" + o);//abc // set()指定索引位置进行替换对象 Object set = list.set(0, 666); // insert 指定索引进行插入 list.add(1, 999); // remove(int index)指定索引移除对象 Object remove = list.remove(0); // indexOf() 返回指定对象首次出现索引值 int dd = list.indexOf("dd"); System.out.println("指定对象首次出现的索引值 " + dd); int dd1 = list.lastIndexOf("dd"); System.out.println("指定对象最后一次出现的索引值 " + dd1); // 截取子集合 结束索引不包含 [) List list1 = list.subList(1, 3); System.out.println("元素内容 " + list); System.out.println("子list "+list1); }
输出结果:

List接口的实现类
ArrayList
底层是数组(数组是一块连续的内存空间)查询效率高, 指定索引新增/删除效率较低
如果调用无参构造方法, 数组其实是空数组, 在第一次调用add的时候开始扩容, 默认生成一个长度为10的数组
LinkedList
底层是双向链表
查询性能较低, 指定索引新增/删除效率高
ArrayList与LinkedList的区别
ArrayList底层是数组, 内存空间连续, 在进行删除和添加的时候会进行数组扩容和元素移动
LinkedList底层是双链表
ArrayList查询性能较高因为地址空间连续, 在指定位置新增, 和删除的时候因为有数组元素移动所以性能较低
LinkedList查询是要对链表进行遍历(从头或从尾)所以性能较低, 在新增和删除元素的时候只需要改动前后两个节点的内容 因此性能较高
Vector
底层也是数组
方法内部加入了线程同步

浙公网安备 33010602011771号