java中List接口实现类之:ArrayList
继承结构:
1、List接口下的所有实现类都是:有序 可重复的
2、ArrayList底层是采用数组,所以用于数组的特性:下标查找快、头尾增加元素快、中间增删改元素慢
3、LinkedList底层采用双向链表存储,所以具有双向链表的特性:中间增删元素快,查询慢
4、Vector底层和ArrayList相同,都是数组。但是Vector相对ArrayList与LinkedList是线程安全的,所以带来的是效率不如后两者
所以:
ArrayList适合查询
LinkedList适合增删
Vector适合要求线程安全
1、ArrayList可以看成一个动态的数组,即可以改变长度的数组;
优点:
*长度可以动态增长
*ArrayList可以不制定元素的基本类型,所以ArrayList不同于数组,其可以存放不同数据类型
缺点:
*也是因为可以改变长度,所以比普通的数组效率要低
*线程不是安全的,所以尽量使用在单线程中,如果是多线程进行使用Vector
2、初始化ArrayList
--可以制定/不指定初始大小,可以指定/不指定元素类型
//1、不指定元素数组类型 //不初始化容量 ArrayList arr = new ArrayList(); //初始化容量 ArrayList arr1 = new ArrayList(10); //2、制定元素类型
//初始化ArrayList且制定元素类型 ArrayList<String> arrlist = new ArrayList<String>();
arrlist.add("a"); //如果指定了元素类型,必须添加该数据类型的元素
3、ArrayList的常用方法
*add()添加元素
//1、add()添加元素 //直接追加(尾部)元素add() arr.add(1); arr.add(2); arr.add(3); //在制定index位置添加元素 arr.add(1,"abc"); //在原arr下标index=1处添加元素"abc"
System.out.println(arr);
//结果:
[1, abc, 2, 3]
*remove()删除元素
//2、remove()删除元素 arr.add(1); arr.add(2); arr.add(3); arr.add(1) arr.add(1,"abc"); //在原arr下标index=1处添加元素"abc" //直接删除xx元素 arr.remove("abc"); //删除下标=2的元素 arr.remove(2);
如何删除元素为1的ArrayList??不能使用remove(1) 因为这是删除下标=1的元素
arr.add(1); arr.add(2); arr.add(3); arr.add(1); arr.add(1,"abc"); //在原arr下标index=1处添加元素"abc"; [1,abc,2,3,1] //方式1 arr.remove(Integer.valueOf(1)); //只能删除第一个值为1的元素 //结果: [abc, 2, 3, 1] ////////////////////////////////方式2///////// arr.add(1); arr.add(2); arr.add(3); arr.add(1); arr.add(1,"abc"); //在原arr下标index=1处添加元素"abc" //方式2:全部删除 arr.removeAll(Arrays.asList(1)); //[abc, 2, 3]
*获取元素的个数size()
arr.add(1); arr.add(2); arr.add(3); arr.add(1); arr.add(1,"abc"); //在原arr下标index=1处添加元素"abc" //获取元素的个数 System.out.println(arr.size()); //5
*设置元素/修改已存在元素set()
arr.add(1); arr.add(2); arr.add(3); arr.add(1); //set() arr.set(1,200); //设置下标1处=200 System.out.println(arr); //[1, 200, 3, 1] //注意:不能设置不存在的下标 arr.set(4,10); //下标最大=3 ❌
*查找元素get()
-- get(int index)
ArrayList arr = new ArrayList(); arr.add("a"); arr.add("b"); arr.add(3); arr.add(1); //get(int index) System.out.println(arr.get(1)); //b
*清空元素clear()
arr.add(1); arr.add(2); arr.add(3); arr.add(1); //clear arr.clear(); System.out.println(arr); //[]
4、ArrayList与普通数组之间相互转换
ArrayList与python中的list数组比较相似(包括形式都是[a,b,c] ),而java中的数组{a ,b,c}更是一种基本数据结构。
posted on 2021-04-18 21:23 jesse_zhao 阅读(137) 评论(0) 编辑 收藏 举报