列表特性:
- 有序的Collection
- 元素可以重复
主要实现
- ArrayList(不支持同步)
- LinkedList(不支持同步)
- Vector(同步)
实现 |
优点 |
缺点 |
适用范围 |
特点 |
ArrayList | LinkedList | Vector |
以可变数组实现的列表,不支持同步 |
以双向链表实现的列表,不支持同步 | 以可变数组实现的列表,支持同步,适合多线程下使用 |
利用索引位置可以快速定位访问 | 顺序访问高效,中间插入和删除高效 | 支持多线程 |
指定位置插入、删除效率低 |
随机索引访问效率低 | 非同步下优先采用ArrayList |
适合变动不大、主要用于查询的数据 | 适用于经常要变化的数据 | 适用于多线程 |
容器填满时自动扩充50% | 容器大小随增删及时变化 |
ArrayList
1.创建
ArrayList<Integer> arraylist=new ArrayList<>();
2.基本操作
(1)add添加
arraylist.add(1);
arraylist.add(2);//添加到末尾
arraylist.add(new Integer(5));
arraylist.add(9);//自动装箱,将int 类型9装箱为Integer
arraylist.add(1,3);//在索引位置为1的地方添加3,即添加元素为第二个元素
(2)remove删除
arraylist.remove(2);//删除索引位置为2元素,即删除第三个元素
(3)clear清空
(4)复制
“=”进行复制,实际是两个变量指向同一对象,arraylist2进行删除或添加,arraylist也会发生相同变化,即两个指针操作同一对象
ArrayList<Integer> arraylist2=new ArrayList<>();
arraylist2=arraylist;
arraylist2.remove(1);
"clone"进行复制,arraylist2指向新产生的对象,互不干扰
ArrayList<Integer> arraylist2=new ArrayList<>();
arraylist2=(ArrayList<Integer>) arraylist.clone();
arraylist2.remove(1);
(5)截取
arraylist=(ArrayList<Integer>) arraylist.subList(1, 3);//原列表第2-4个元素组成的列表
(6)获取元素位置
int a=arraylist.indexOf(3);//第一次出现的位置
int b=arraylist.lastIndexOf(3);//最后一次出现的位置
3.遍历
(1)for循环遍历
for(Integer item:arraylist) {
System.out.println(item);
}
(2)for循环索引遍历
for(int i=0;i<arraylist.size();i++) {
System.out.println(arraylist.get(i));
}
(3)迭代器遍历
Iterator<Integer> iterator=arraylist.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
LinkedList
1.创建
LinkedList<Integer> linkedlist=new LinkedList<>();
2.基本操作
(1)add添加
linkedlist.add(1);
linkedlist.add(2);//添加到末尾
linkedlist.add(new Integer(5));
linkedlist.add(9);//自动装箱,将int 类型9装箱为Integer
linkedlist.add(1,3);//在索引位置为1的地方添加3,即添加元素为第二个元素
(2)remove删除
linkedlist.remove(2);//删除索引位置为2元素,即删除第三个元素
linkedlist.remove();//删除列表头部元素
(3)clear清空
(4)复制
“=”进行复制,实际是两个变量指向同一对象,linkedlist2进行删除或添加,linkedlist也会发生相同变化,即两个指针操作同一对象
LinkedList<Integer> linkedlist2=new LinkedList<>();
linkedlist2=linkedlist;
linkedlist2.remove(1);
"clone"进行复制,linkedlist2指向新产生的对象,互不干扰
LinkedList<Integer> linkedlist2=new LinkedList<>();
linkedlist2=(LinkedList<Integer>) linkedlist.clone();
linkedlist2.remove(1);
(5)获取元素位置
int a=linkedlist.indexOf(3);//第一次出现的位置
int b=linkedlist.lastIndexOf(3);//最后一次出现的位置
3.遍历
(1)for循环遍历
for(Integer item:linkedlist) {
System.out.println(item);
}
(2)for循环索引遍历
for(int i=0;i<linkedlist.size();i++) {
System.out.println(linkedlist.get(i));
}
(3)迭代器遍历
Iterator<Integer> iterator=linkedlist.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}