List:包含零个或多个对象的有序集合,允许重复
表达类型
- ArrayList
- LinkedList
list.size() 和 list.elementData() ,一个是元素个数,一个是真正存储数据的数组
增强for循环,对把int数组list遍历;
for(type 变量名:集合变量名){……}
eg.
for (int num : list) {//把num从list里的元素挨个走一遍
//写自己的程序
}
要创建列表,请指定菱形<>运算符中的对象/通用类型:
- List<String> list1 = new ArrayList<String>();
- List<String> list2 = new LinkedList<String>();
eg.
- ArrayList是一个动态数组,随着容器中的元素不断增加,容器的大小也会随着增加。同时由于ArrayList底层是数组实现,所以可以随机访问元素。
- LinkedList可以根据索引来随机访问集合中的元素。除此之外,LinkedList还实现了Deque接口,所以可以被当成“双端队列”来使用,还可以被当成“栈”来使用。它也是一个双向链表,LinkedList不能随机访问,但增删元素比较方便。
区别
- 底层实现:LinkedList底层是双向链表 ;ArrayList底层是可变数组
- 随机访问:LinkedList随机访问效率低 ;ArrayList随机访问效率高,因为LinkedList需要移动指针
- 插入删除:LinkedList插入和删除效率快 ;ArrayList插入和删除效率低,因为ArrayList要移动数据
常见操作
list.add(5)//adding 将list当做当前list中的一个元素添加进去
list.add(1, 3)//inserting
list.set(2, 7)//assigning 将数组中7替换成2
list.get(2)//retrieving 索引
list.size()//length
list.remove(1)//remove 删除1
list.clear()//remove all 删除所有