ArrayList<String> arr1 = new ArrayList<>();
ArrayList<String> arr2 = new ArrayList<String>();
- <> 中存放的是泛型(泛型:集合中存储的元素类型)。
- new调用构造方法进行实例化得到对象。
集合 | 数组 | |
---|---|---|
元素类型 | Integer,必须为引用类型 | int,Integer都可以 |
长度 | 不定 | 固定 |
操作 | 基于方法调用(增加、删除等) | 基于索引(取值、赋值等) |
public boolean add(E e) {};
作用:给集合添加元素(元素依次添加到集合的后边)。
应用:
public void f1() {
ArrayList<String> arr = new ArrayList<>();
arr.add("pp");
arr.add("qq");
arr.add("rr");
arr.add("tt");
System.out.println(arr);
}
结果:
[pp, qq, rr, tt]
public void add(int index, E element) {}
作用:在索引为index的地方添加元素element。
应用:
public void f1() {
ArrayList<String> arr = new ArrayList<>();
arr.add("pp");
arr.add("qq");
arr.add("rr");
arr.add("tt");
System.out.println(arr);
arr.add(4, "99");
System.out.println(arr);
}
输出:
[pp, qq, rr, tt]
[pp, qq, rr, tt, 99]
注意:index的值不能超过arr.size(),否则会发生异常。
描述:
语法:
public E remove(int index) {
}
参数
应用:
public void f1() {
ArrayList<String> arr = new ArrayList<>();
arr.add("pp");
arr.add("qq");
arr.add("rr");
arr.add("tt");
System.out.println(arr);
arr.add(4, "99");
System.out.println(arr);
arr.remove(3);
System.out.println(arr);
}
结果:
[pp, qq, rr, tt]
[pp, qq, rr, tt, 99]
[pp, qq, rr, 99]
public E get(int index) {}
实例:
public void f1() {
ArrayList<String> arr = new ArrayList<>();
arr.add("pp");
arr.add("qq");
arr.add("rr");
arr.add("tt");
System.out.println(arr.get(2));
}
输出:
rr
public E set(int index, E element) {}
实例:
public void f1() {
ArrayList<String> arr = new ArrayList<>();
arr.add("pp");
arr.add("qq");
arr.add("rr");
arr.add("tt");
System.out.println(arr);
System.out.println(arr.set(0, "ss"));
System.out.println(arr);
}
结果:
[pp, qq, rr, tt]
pp
[ss, qq, rr, tt]
public boolean contains(Object o) {}
代码示例:
public void f1() {
ArrayList<String> arr = new ArrayList<>();
arr.add("pp");
arr.add("qq");
arr.add("rr");
arr.add("tt");
System.out.println(arr);
System.out.println(arr.contains("tt"));
System.out.println(arr.contains("oo"));
}
结果:
[pp, qq, rr, tt]
true
false
public boolean addAll(Collection extends E> c) {}
应用:
public void f1() {
ArrayList<String> arr = new ArrayList<>();
ArrayList<String> arr1 = new ArrayList<>();
arr.add("pp");
arr.add("qq");
arr.add("rr");
arr.add("tt");
arr1.add("rrrr");
System.out.println(arr);
System.out.println(arr1);
System.out.println(arr1.addAll(arr));
System.out.println(arr1);
}
结果:
[pp, qq, rr, tt]
[rrrr]
true
[rrrr, pp, qq, rr, tt]
public boolean containsAll(Collection> c) {}
实例:
public void f1() {
ArrayList<String> arr = new ArrayList<>();
ArrayList<String> arr1 = new ArrayList<>();
arr.add("a");
arr.add("b");
arr.add("c");
arr1.add("a");
arr1.add("a");
arr1.add("a");
System.out.println(arr);
System.out.println(arr1);
System.out.println(arr.containsAll(arr1));
arr1.add("v");
System.out.println(arr.containsAll(arr1));
}
结果:
[a, b, c]
[a, a, a]
true
false
一、 for循环标准格式遍历集合
代码示例:
public static void main(String[] args) {
arr1.add("aa");
arr1.add("bb");
arr1.add("cc");
arr1.add("ee");
arr1.add("ff");
for (int i = 0; i < arr1.size(); i++) {
System.out.print(arr1.get(i) + " ");
}
}
输出:
aa bb cc ee ff
二、 增强型for循环遍历
代码示例:
public static void main(String[] args) {
arr1.add("aa");
arr1.add("bb");
arr1.add("cc");
arr1.add("ee");
arr1.add("ff");
for (String s : arr1) {
System.out.print(s+" ");
}
}
结果:
aa bb cc ee ff
代码1演示:
public class ArrayListBianLi2_1 {
public static ArrayList<String> arr1 = new ArrayList<>();
public static void main(String[] args) {
arr1.add("aa");
arr1.add("bb");
arr1.add("cc");
arr1.add("ee");
arr1.add("ff");
for (String s : arr1) {
System.out.println("-----" + s);
if ("cc".equals(s)) {
arr1.remove(s);
break;
}
}
}
}
结果:
-----aa
-----bb
-----cc
代码2展示:
package package12_22;
import java.util.ArrayList;
public class ArrayListBianLi2_1 {
public static ArrayList<String> arr1 = new ArrayList<>();
public static void main(String[] args) {
arr1.add("aa");
arr1.add("bb");
arr1.add("cc");
arr1.add("ee");
arr1.add("ff");
for (String s : arr1) {
System.out.println("-----" + s);
if ("ee".equals(s)) {
//倒数第二个
arr1.remove(s);
break;
}
}
}
}
结果:
-----aa
-----bb
-----cc
-----ee
代码3演示:
package package12_22;
import java.util.ArrayList;
public class ArrayListBianLi2_1 {
public static ArrayList<String> arr1 = new ArrayList<>();
public static void main(String[] args) {
arr1.add("aa");
arr1.add("bb");
arr1.add("cc");
arr1.add("ee");
arr1.add("ff");
for (String s : arr1) {
System.out.println("-----" + s);
if ("ff".equals(s)) {
arr1.remove(s);
}
}
}
}
foreach遍历时删除/插入元素 是不允许的!(只要有元素个数的变化,就不允许)用foreach结构时改动元素数量会抛出异常。
使用索引进行遍历时删除,必须注意索引号,避免遍历遗漏元素或者越界。
代码示例:
for (int i = 0; i < arr1.size(); i++) {
System.out.print("+++++"+arr1.get(i) + " "+arr1.size()+"\n");
String s = arr1.get(i);
if("bb".equals(s)) {
arr1.remove(s);
}
System.out.print("-----"+arr1.get(i) + " "+arr1.size()+"\n");
}
结果:
+++++aa 5
-----aa 5
+++++bb 5
-----cc 4
+++++ee 4
-----ee 4
+++++ff 4
-----ff 4
c没有被遍历,即:遗漏了被删除元素的最后一个元素。
原因:遗漏元素是因为删除元素后,List的size已经减1,但是i不变,则i的位置元素等于被跳过,不在循环中处理。
解决办法:调用remove()方法后,加上i–,则能避免这种错误。
索引方式逆序遍历时删除,正确运行。
//逆向遍历
for (int i = arr1.size()-1; i>=0; i--) {
System.out.print("+++++"+arr1.get(i) + " "+arr1.size()+"\n");
String s = arr1.get(i);
if("bb".equals(s)) {
arr1.remove(s);
}
System.out.print("-----"+arr1.get(i) + " "+arr1.size()+"\n");
}
结果:
+++++ff 5
-----ff 5
+++++ee 5
-----ee 5
+++++cc 5
-----cc 5
+++++bb 5
-----cc 4
+++++aa 4
-----aa 4
总结:遍历用逆向,插入用正向。
迭代器方式遍历时删除,正确运行。
代码:
arr1.add("aa");
arr1.add("bb");
arr1.add("cc");
arr1.add("ee");
arr1.add("ff");
Iterator<String> iterator = arr1.iterator();
while(iterator.hasNext()) {
//是否存在未被遍历的元素
String str = iterator.next();
System.out.println(str);
if("bb".equals(str)) {
iterator.remove();
}
结果:
aa
bb
cc
ee
ff
public static void main(String[] args) {
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = null;
ArrayList<String> list3 = new ArrayList<>(0);
System.out.println(list2 == null);// true
System.out.println(list1 == list2); // false
System.out.println(list1.size());// 0
System.out.println(list3.size());// 0
System.out.println(list1.isEmpty());// true
System.out.println(list3.isEmpty());// true
}
输出:
true
false
0
0
true
true
public E peek() {}
代码示例:
public void f1() {
LinkedList<String> ls = new LinkedList<String>();
System.out.println(ls.peek());
ls.add("aa");
ls.add("bb");
ls.add("cc");
System.out.println(ls.peek());
}
结果:
null
aa
public E poll() {}
代码示例:
public void f1() {
LinkedList<String> ls = new LinkedList<String>();
System.out.println(ls.poll());
ls.add("aa");
ls.add("bb");
ls.add("cc");
System.out.println(ls);
System.out.println(ls.poll());
System.out.println(ls);
}
结果:
null
[aa, bb, cc]
aa
[bb, cc]
public E pop() {}
代码示例:
public void f1() {
LinkedList<String> ls = new LinkedList<String>();
ls.add("aa");
ls.add("bb");
ls.add("cc");
System.out.println(ls.pop());
System.out.println(ls);
}
结果:
aa
[bb, cc]
public void push(E e) {}
代码示例:
public void f1() {
LinkedList<String> ls = new LinkedList<String>();
ls.add("aa");
ls.add("bb");
ls.add("cc");
ls.push("qqq");
System.out.println(ls);
}
结果:
[qqq, aa, bb, cc]