List 集合
List 接口 (有序,带索引,元素可重复),继承了 Collection 接口继承了它的方法外,它还定义了 list 集合的特性和独有方法,它的元素是 有序带索引且可重复 的,通过索引可以精确操作集合元素。所有对索引操作的方法都存在 角标越界 的错误风险。
List 重载和特有方法一览:
方法 |
效果 |
返回值 |
add(int,object) |
指定插入 |
void |
set(int,object) |
修改元素 |
Object(泛型对象) |
get(int) |
获取元素 |
Object(泛型对象) |
indexOf(object) |
查找获取该元素位置 |
int |
remove(int) |
删除元素 |
被删除元素 |
subList(int,int) |
取部分集合,取头不取尾 |
List |
List 已实现类和特性:
- Vector: 是长度可变的数组结构,增删改查都慢,同步(不建议使用)
- ArrayList: 是长度可变的数组结构,查询速度快,增删较慢,且是不同步的
- LinkedList: 是链表结构(指针),增删快,查询较慢,不同步
List 的基本使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| List list=new ArrayList(); list.add("obj1"); list.add("obj2"); list.add("obj3");
list.add(1,"obj");
list.set(0,"obj0");
System.out.println(list.get(1));
System.out.println(list.indexOf("obj2"));
System.out.println(list.lastIndexOf("obj0"));
list.remove("obj");
List list2=list.subList(0,2);
System.out.println(list2); System.out.println(list);
|
运行结果:
1 2 3 4 5
| obj 2 0 [obj0, obj2] [obj0, obj2, obj3]
|
在循环中修改元素:
- 在 for 循环中对 list
remove
操作时需注意元素的移动,和 size 的变化。
1 2 3 4 5 6 7 8 9
| for(int i=0;i<list.size();i++){ System.out.println(i+":"+list.get(1)); if (list.get(i).equals("obj2")){ list.remove("obj2"); i--; } }
|
- 利用 ListIterator 动态修改元素(官方推荐):
1 2 3 4 5 6 7 8 9 10 11 12
| for (ListIterator li=list.listIterator();li.hasNext();){ if(li.next().equals("obj0")){ li.set("obj"); li.remove(); li.add("obj1"); } }
|
注意此 ListIterator 迭代器为为 list 独有。
LinkedList:
此类的方法是实现模拟 堆栈 或 队列 的最好选择
1 2 3 4 5 6 7 8 9 10 11 12 13
| LinkedList list=new LinkedList();
list.addFirst("add0");
list.addLast("add1");
list.getFirst();
list.getLast();
list.removeFirst();
list.removeLast();
|