遍历集合
集合的特点:
(1) 集合有默认值;
(2) 集合初始化后长度可以改变;
(3) 集合通过泛型,只能存储引用类型;
(4) 直接打印集合名称,得到的是:[具体内容];
如果集合内容为空,结果是:[ ]。
泛型:
遇到尖括号引起来的,表示指定使用引用数据类型;
代码如下:
public class Test02 {
public static void main(String[] args) {
ArrayList<Integer> arrayList=new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
System.out.println(arrayList); //[1,2]
//正常遍历
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList.get(i));
}
//删除集合元素,倒着遍历
//先获取1号索引位置元素,再删除该索引元素,索引-1
//经过再遍历,索引值为0
//获取0号索引位置元素,再删除该索引元素,元素清空
for(int i=arrayList.size()-1; i>=0;i--){
System.out.println(arrayList.get(i));
System.out.println(arrayList.remove(i));
}
}
}
解析:
(1)获取集合长度是 i<arrayList.size();
(2)获取当前元素是 arrayList.get(i);
(3)添加元素是 arrayList.add(泛型中类型一致的值);
(4)删除集合元素 arrayList.remove(i);
注意:
(1)删除集合元素方法返回值类型是返回的元素值。
(2)操作时注意不能访问没有的元素,否则会报错
Exception in thread "main" java.lang.IndexOutOfBoundsException
for(int i=arrayList.size()-1; i>=0;i--){
System.out.println(arrayList.remove(i));
System.out.println(arrayList.get(i));//报错,删完了再获取该位置元素
}
========================================================================================================================================================
集合中删除指定元素:
List<String> list = new ArrayList<>();
list.add("abc");
list.add("def");
list.add("def");
list.add("abc");
//第一种
for (int i = list.size() - 1; i >= 0; i--) {
if(list.get(i)=="def"){
list.remove(i);
}
}
System.out.println(list); //[abc, abc]
//第二种
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == "def") {
list.remove(i);
i--;
}
}
System.out.println(list); //[abc, abc]
========================================================================================================================================================
对象集合:
public class Demo {
public static void main(String[] args) {
//存储String类型
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("def");
list.add("abc");
//存储对象类型
ArrayList<Person> arrayList = new ArrayList<>();
Person p1 = new Person("张三", 23);
Person p2 = new Person("李四", 24);
Person p3 = new Person("王五", 25);
arrayList.add(p1);
arrayList.add(p2);
arrayList.add(p3);
}
}
========================================================================================================================================================
集合习题
第一题:
下面可以删除list中所有的“java”的代码是()
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL3VkeNFzY65keRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2kTN3ADOxQTMyETMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
A、 list.remove(“java”);
B、list.removeAll(“java”);
C、
D、
E、
解析
A错误, list.remove(“java”)只删除的是遇到的第一个java
B错误,list.removeAll(“java”)直接报错,原因如下:
removeAll(java.util.Collection<?>) in ArrayList cannot be applied to (java.lang.String)
解释:ArrayList中的removeAll(java.util.Collection<?>)不能应用于java.lang.String
C正确,集合中原本有得元素是 [java, aaa, java, java, bbb]
倒着遍历,最终结果是 [aaa, bbb]
D错误,集合中原本有得元素是 [java, aaa, java, java, bbb]
顺着遍历,遇见一个java删除该元素,因此下一个元素顶替了该元素位置,少遍历某一个元素
这样处理最终结果是 [aaa, java, bbb]
E正确, [java, aaa, java, java, bbb]
顺着遍历并且删除后先自减索引值,遇见一个java删除该元素,自减完后继续遍历
这样处理最终结果是 [aaa, bbb]
============================================================================
第二题:
查看以下代码,输出的结果为:( )
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("def");
list.add("def");
list.add("ghi");
for(int i = 0; i < list.size(); i++) {
if(list.get(i).equals("def")) {
list.remove(i);
}
}
System.out.println(list);
A:[abc]
B:[abc, def]
C:[abc, def, ghi]
D:[abc, ghi]
解析
注意正序删除元素时候,只有i–才能将集合里的相关内容全部删除。
这道题中,选C。
============================================================================
第三题:
以下不属于ArrayList集合中常用的方法的是:( )
A:add(E e);
B:size();
C:delete(int index);
D:remove(int index);
解析
ABD都正确,C并不是集合的方法。
============================================================================
第四题
集合和数组的区别描述正确的是:( )
A:数组的长度是固定的、集合的长度是可变
B:数组既可以存储基本数据类型、也可以存储引用数据类型
C:数组只能存储基本数据类型
D:集合只能存储引用数据类型
解析
A正确,数组长度固定,,集合长度可变。
B正确,数组可以存储基本类型和引用类型。
C错误,数组可以存储基本类型和引用类型。
D正确,集合只能存储引用类型。