1、ArrayList的概述:
ArrayList是List的实现类,存储多个Object对象;特点是:有序、有下标、元素可以重复;下标范围是:0~size()-1;线程不安全,因为底层方法是非同步的
2、ArrayList的实现原理:
ArrayList,底层封装了一个数组,利用一个int size()统计数组中元素的个数(应用层:集合中元素的个数),创建集合对象时,底层数组长度为0,只有当第一次往集合中添加(第一次调用add方法)元素的时候,为数组分配空间,长度默认为10,如果存储的元素个数达到数组的长度上限时,自动扩容,每次扩容为原来的1.5倍(每次扩容倍数太大,空间利用率低;每次扩容一个空间,导致频繁的扩容,降低程序效率)
ArrayList:底层使用数组实现,查询效率较快,增(插入)删除操作时效率较低
ArrayList底层实现:ArrayList的构造方法(源码)
3、ArrayList常用的方法:
常见的方法:部分继承与父接口Collection
a.void add(Object obj):往集合中添加一个对象,添加成功-true;不成功-false
b.Object get(int index):通过下标获取对象 注意:如果指定下标超过下标范围,则运行报错,报错信息为:java.lang.IndexOutOfBoundsException(下标越界)
c.Object remove(int index):根据下标删除集合元素,被删除的元素作为返回值进行返回 d.Object set(int index,Object obj):根据下标替换对应下标的元素,被替换元素作为返回值返回
e.boolean contains(Object o) :判断集合中是否包含某个对象,包含-true;不包含-false
练习代码
public static void main(String[] args) {
//存储三个字符串,“张三”、“李四”、“王五”,"你好","甲一"、进行统一管理
//1、创建集合对象(容器)
ArrayList<String> alist = new ArrayList<>();
//添加元素
alist.add("张三");
alist.add("李四");
alist.add("王五");
alist.add("你好");
alist.add("甲一");
System.out.println("集合中存储的数据个数:"+alist.size());
System.out.println("获取1下标的元素内容:"+alist.get(1));
//查看集合中所有数据的内容->遍历
//利用循环的变量控制集合的下标
for (int i = 0; i < alist.size(); i++) {
//通过下标获取对应的数据
System.out.println(alist.get(i));
}
System.out.println("------------");
for (int i = 0; i < alist.size(); i++) {
String str = alist.get(i);
//判断 集合中每个元素是否包含“三”,是-打印输出内容
if (str.contains("三")) {
System.out.println(alist.get(i));
}
//判断是否姓李
if (str.startsWith("李")){
System.out.println(alist.get(i));
}
}
alist.remove(3);//把下标为3的“你好”给移除了
System.out.println("-----------");
//使用增强for循环遍历(也称为forEach循环)
for (String s : alist) {
System.out.println(s);
}
}
运行结果为:
集合中存储的数据个数:5
获取1下标的元素内容:李四
张三
李四
王五
你好
甲一
------------
李四
-----------
张三
李四
王五
甲一