一 list基础增 删 改 查
add增加
remove删除
set修改
get查询
ArrayList是通过数组来完成的,而且添加顺序是有序的
package a117;
import java.util.ArrayList;
public class 博客集合list1 {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//增加
arrayList.add(111);
arrayList.add(222);
arrayList.add(333);
arrayList.add(444);
arrayList.add(555);
arrayList.add(666);
System.out.println("集合元素有:"+arrayList);
//删除·根据下标删除
arrayList.remove(3);
System.out.println("集合元素删除下标3后:"+arrayList);
//修改
arrayList.set(2, 777);
System.out.println("集合元素修改下标2为777后:"+arrayList);
//查询
Integer index2 = arrayList.get(2);
System.out.println("下标是2的值是:"+index2);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/f3ababe6fd2de6ba7b02ff57129c8483.png)
二 Arraylist中Collections的使用
Collections.swap(list,2,3);//将变量名为list的列表下标为2和3位置上的值进行交换
![](https://i-blog.csdnimg.cn/blog_migrate/47ce891c4f53f07215268d5ba1ef11eb.png)
Collections.sort(list); //自然排序
![](https://i-blog.csdnimg.cn/blog_migrate/169efc79924493a80ddc0b2072443ee0.png)
Collections.reverse(list)//反向排序,(不是倒序,倒序是从大到小排,而这个是根据数组中原始的顺序反过来排)
![](https://i-blog.csdnimg.cn/blog_migrate/2b210f98ff1ee5eeda9673323c094fc8.png)
Collections.shuffle(list)//随机排序
![](https://i-blog.csdnimg.cn/blog_migrate/cdd7699ed435720f577cff25416551c7.png)
contains判断是否有某元素
![](https://i-blog.csdnimg.cn/blog_migrate/1557c5295d162fcfef08cdd551f12fe4.png)
sublist集合截取(这里是从1到3,1算上也就是开头3不算所以2是而最后一个)
![](https://i-blog.csdnimg.cn/blog_migrate/6ee6e91ea4a2967b8319e776605b9dae.png)
用for循环遍历( 如果只是做查询是没有问题的,如果要操作集合就得使用fori循环了,因为有下标。)
![](https://i-blog.csdnimg.cn/blog_migrate/058e78d67ee13cfc8a0ba97bcee468cf.png)
三、ArrayList 常用方法列表如下:
![](https://i-blog.csdnimg.cn/blog_migrate/1e2ec9e807fcf97d982d9248b628758e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/23d62d041056231a1c05d7727a8f4084.png)
四、ArrayList、 LinkedList 和 Vector之间的区别
![](https://i-blog.csdnimg.cn/blog_migrate/4cc7e101a4c61b7d9aaf2dab739ee495.png)
Arraylist
ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。
LinkedList
LinkedList底层是通过双向链表实现的。所以,LinkedList和ArrayList之前的区别主要就是数组和链表的区别。
数组中查询和赋值比较快,因为可以直接通过数组下标访问指定位置。
链表中删除和增加比较快,因为可以直接通过修改链表的指针(Java中并无指针,这里可以简单理解为指针。其实是通过Node节点中的变量指定)进行元素的增删。
所以,LinkedList和ArrayList相比,增删的速度较快。但是查询和修改值的速度较慢。同时,LinkedList还实现了Queue接口,所以他还提供了offer(), peek(), poll()等方法。
vector
Vector和ArrayList一样,都是通过数组实现的,但是Vector是线程安全的。和ArrayList相比,其中的很多方法都通过同步(synchronized)处理来保证线程安全。
如果你的程序不涉及到线程安全问题,那么使用ArrayList是更好的选择(因为Vector使用synchronized,必然会影响效率)。
二者之间还有一个区别,就是扩容策略不一样。在List被第一次创建的时候,会有一个初始大小,随着不断向List中增加元素,当List认为容量不够的时候就会进行扩容。Vector缺省情况下自动增长原来一倍的数组长度,ArrayList增长原来的50%。
Arraylist、Linkedlist、Vector的选择
添加和删除操作上LinkedList更快,但在查询速度较慢。
但是如果是多线程的时候要选择Vector方便一些同步好处理。
如果不涉及到多线程就从LinkedList、ArrayList两个中选。
LinkedList更适合从末尾插入或删除(链表的特性)。
ArrayList更适合检索和在中间插入或者删除(数组的特性)。