集合
1、什么是集合
集合又称为容器,用于存储、提取、删除数据。JDK提供的集合API都包含在 java.util 包内,因此一般要使用集合的的方法时需要引入java.util.ArrayList包。我们一般把存入集合内的数据(可以是基本数据类型,引用类型,方法等任意数据类型)称为元素。
注意:集合的底层即为数组,因此集合储存元素时也按照先后的存储顺序给元素排列。
2、集合分支
集合框架有两大分支:Collection接口和Map接口
其中Collection的包含关系如下图所示:
3、创建集合对象(此处以ArrayList类型为例)
语法格式:
ArrayList<数据类型> 变量名 = new ArrayList<数据类型>();
“<数据类型>”表示泛型,限定了存储在集合中元素的数据类型,可以自行定义。如果没有自定义,则默认类型为Object,即集合中可以存放任意类型数据。
不限定数据类型实列如下:
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add(10086);
}
}
ArrayList的常用方法
1、add(Object element) 向列表的尾部添加指定的元素
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();//创建集合类型对象list
list.add("Tom");//使用add方法向集合list中添加字符串“Tom”
}
}
2、size() 返回列表中的元素个数
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();//创建集合类型对象list
list.add("Tom");
int length = list.size();//获取集合中有多少个元素
System.out.println(list.size());
}
}
3、get(int index) 返回列表中指定位置的元素,index从0开始
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
String str = list.get(0);//获取集合中存放的第一个元素“Tom”并赋值给字符串str
System.out.println(str);
}
}
4、clear() 从列表中移除所有元素
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
list.clear();//清空集合中所有元素
System.out.println(list.size());//检验集合中元素个数是否为0
}
}
5、isEmpty() 判断列表是否包含元素,不包含元素则返回 true,否则返回false
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
boolean flag = list.isEmpty();//使用isEmpty方法判断集合是否为空,并将boolean结果赋给flag
System.out.println(flag);//输出flag
}
}
6、remove(int index) 移除列表中指定索引位置(从0开始)的元素,并返回被删元素,同时后面元素向前移动
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
System.out.println(list.size());//输出移除前集合元素个数
String str = list.remove(0);//将移除的字符串赋给str
System.out.println(list.size());//输出移除后集合元素个数
System.out.println(str);
}
}
7、remove(Object o) 移除集合中第一次出现的指定元素,移除成功返回true,否则返回false
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
System.out.println(list.size());//输出移除前集合元素个数
boolean flag = list.remove("Tom");//将移除结果赋给flag
System.out.println(list.size());//输出移除后集合元素个数
System.out.println(flag);//打印移除是否成功
}
}
8、contains(Object o) 如果列表包含指定的元素,则返回 true
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
boolean flag = list.contains("Jim");//判断数组里是否存在“Jim”元素
System.out.println(flag);//打印判断结果
}
}
思考:contains判断过程如何实现?
我们使用Ctrl+单击方法,找到contains()方法在所在ArrayList类中的位置。底层代码如下:
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))//由于o是个上转型对象,因此o其实调用的是String类中的对象,此处属于多态
return i;
}
return -1;
}
可以看出,程序将String类型的“Jim”传递给变量o,又变量o的类型为Object,因此o上是上转型对象。
此处仅简要分析,详细剖析contains()方法底层代码见于:分析ArrayList实现类中contains()方法底层代码
9、add(int index, Object element) 在列表的指定位置插入指定元素,原来位置元素后置
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
System.out.println(list.get(0));//打印原来集合中第一个元素
list.add(0,"Kate");//在集合第一位置添加Kate元素
System.out.println(list.get(0));//打印添加后集合中第一个元素
}
}
10、set(int i, Object element) 将索引i位置元素替换为元素element并返回被替换的元素
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
System.out.println(list.get(0));//打印原来集合中第一个元素
list.set(0,"Kate");//把集合中第一个元素替换为Kate元素
System.out.println(list.get(0));//打印添加后集合中第一个元素
}
}
11、iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("Tom");
list.add("Jim");
Iterator<String> iterator = list.iterator();//将list集合中的元素转移到iterator变量中(list集合里的元素仍然存在)
while(literator.hasNext){//判断当前“指针”下是否还有元素,返回布尔值
System.out.println(literator.next());//向下移动“指针”,并输出所在位置的值
}
}
}