gogogo出发喽!让我们来认识一下它吧
什么是ArrayList
Java 中的 ArrayList 是 Java 集合框架中的重要类,用于实现动态数组
- 动态数组:可按需自动扩展或缩小,无需手动管理数组大小。比如不断向 ArrayList 添加元素时,它会自动增加容量来存储新元素 。(当添加元素使当前容量不足时,通常会增加当前容量的一半来扩容。例如原容量为 10,添加第 11 个元素时会扩容到 15)
- 元素存储多样:能存储包括基本数据类型(实际存储的是对应的包装类)和对象在内的各种数据类型。
- 索引访问:和普通数组一样,可通过索引快速访问元素,时间复杂度为 O (1) 。
- 允许重复元素:集合中能存在多个相同元素。
- 泛型支持:使用泛型可在编译时指定存储的元素类型,提供类型安全性,避免类型转换异常。如
ArrayList<String>
只能存储字符串类型元素 。 - 非线程安全:在多线程环境中,若多个线程同时读写,需额外同步措施保证线程安全,否则可能出现数据不一致问题 。
ArrayList的创建
1.使用默认构造函数创建一个空ArrayList
public static void main1(String[] args) { ArrayList<String> i=new ArrayList<>();//创建空的ArrayList i.add("i'm");//add来添加元素 i.add("your"); i.add("father"); System.out.println(i); } }
运行结果:[i'm, your, father]
2.使用有初始容量的构造函数创建ArrayList
public static void main(String[] args) {
ArrayList<Integer> k=new ArrayList<>(5);//默认容量为5
k.add(1);
k.add(2);
k.add(3);
k.add(4);
k.add(5);
k.add(6);//超出容量ArrayList自动扩容
k.add(6);//自动扩容
System.out.println(k);
}
3. 在原始ArrayList上再创建新的ArrayList
public static void main(String[] args) { List<String> U=new ArrayList<>(); U.add("VIVO"); U.add("OPPO"); U.add("IQOO"); U.add("ONEPLUS"); ArrayList<String> O=new ArrayList<>(U); O.add("HUAWEI");//后加 System.out.println(O);
运行结果:[VIVO, OPPO, IQOO, ONEPLUS, HUAWEI]
4.指定位置插入add(下标,元素)
public static void main(String[] args) { ArrayList<String> i=new ArrayList<>(); i.add("i'm"); i.add("your"); i.add("father"); i.add(3,"的儿子");//在3下标位置插入 System.out.println(i); } }
运行结果:[i'm, your, father, 的儿子]
5. 添加全部 addAll()
public class TEXT { public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("1"); i.add("2"); i.add("3"); i.add("4"); List<String> u= Arrays.asList("5","6"); i.addAll(u); System.out.println(i); }
运行结果:[1, 2, 3, 4, 5, 6]
由 Arrays.asList()
创建的列表是固定大小的,意味着你不能使用 add()
、remove()
这类方法来改变列表的大小,否则会抛出 UnsupportedOperationException
异常。
6.ArrayList删除元素 remove(下标)
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("1"); i.add("2"); i.add("3"); i.add("4"); i.remove(3);//删除3下标 System.out.println(i); }
运行结果:[1, 2, 3]
remove(元素)
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("1"); i.add("2"); i.add("3"); i.add("3"); i.add("4"); i.remove("3");//删除第一个元素“3” System.out.println(i); }
运行结果:[1, 2, 3, 4]
7.获取指定下标的元素 get(下标)
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("1"); i.add("2"); i.add("3"); i.add("3"); i.add("4"); i.remove("3"); System.out.println(i); String p=i.get(2);//获取指定下标的元素 System.out.println(p); }
运行结果:[1, 2, 3, 4]
3
8.将指定下标的元素进行替换 set(下标,替换元素)
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("1"); i.add("2"); i.add("3"); i.add("4"); i.set(2,"7");//将2下标元素替换为“7” System.out.println(i); }
运行结果:[1, 2, 7, 4]
9.清空clear()
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("1"); i.add("2"); i.add("3"); i.add("4"); i.set(2,"7"); System.out.println(i); i.clear(); System.out.println(i); }
运行结果:[1, 2, 7, 4]
[]
10.判断是否包含元素 Boolean contains(元素)
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("1"); i.add("2"); i.add("3"); i.add("4"); i.set(2,"7"); Boolean y=i.contains("7"); System.out.println(y);//返回为true false }
运行结果:true
11.返回元素所在的下标int indexOf(元素)
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("1"); i.add("2"); i.add("3"); i.add("4"); i.set(2,"7"); int index= i.indexOf("7"); System.out.println(index); }
运行结果:2
12.倒着查找返回第一个被找到的元素的下标int lastIndexOf(元素)
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("7"); i.add("2"); i.add("3"); i.add("5"); i.set(2,"7");//这里为倒数第一个下标为2 int index= i.lastIndexOf("7"); System.out.println(index); }
运行结果:2
13.截取部分list:list<E>sublist(起始下标,结束下标)注:这里为左闭右开
public static void main(String[] args) { List<String> i=new ArrayList<>(); i.add("7");//0 i.add("2");//1 i.add("3");//2 i.add("5");//3 i.set(2,"7"); List<String> b=i.subList(2,3);//左闭右开这里就只有2下标元素 System.out.println(b); }
运行结果:[7]
ArrayList遍历
1.for循环遍历
public static void main(String[] args) { List<String> U = new ArrayList<>(); U.add("VIVO"); U.add("OPPO"); U.add("IQOO"); U.add("ONEPLUS"); ArrayList<String> O = new ArrayList<>(U); O.add("HUAWEI");//后加 System.out.println(O); for (int i = 0; i < O.size(); i++) { System.out.println(O.get(i));//逐条输出 } } }
运行结果:[VIVO, OPPO, IQOO, ONEPLUS, HUAWEI]
VIVO
OPPO
IQOO
ONEPLUS
HUAWEI
2.增强for循环输出
public static void main(String[] args) { List<String> U = new ArrayList<>(); U.add("VIVO"); U.add("OPPO"); U.add("IQOO"); U.add("ONEPLUS"); ArrayList<String> O = new ArrayList<>(U); O.add("HUAWEI");//后加 System.out.println(O); for (String e : O) { System.out.println(e);//增强for循环打印 } } }
运行结果:[VIVO, OPPO, IQOO, ONEPLUS, HUAWEI]
VIVO
OPPO
IQOO
ONEPLUS
HUAWEI
3.使用迭代器
public static void main(String[] args) { List<String> U = new ArrayList<>(); U.add("VIVO"); U.add("OPPO"); U.add("IQOO"); U.add("ONEPLUS"); ArrayList<String> O = new ArrayList<>(U); O.add("HUAWEI");//后加 System.out.println(O); Iterator<String> k = O.iterator(); while (k.hasNext()) { String u = k.next(); System.out.println(u);//迭代器打印 } } }
运行结果:[VIVO, OPPO, IQOO, ONEPLUS, HUAWEI]
VIVO
OPPO
IQOO
ONEPLUS
HUAWEI
好了相信看到这里你一定有很多收获吧,好兄弟我们下期再见~~~