1.集合框架概述
- 集合又称为容器,用于存储、提取、删除数据。JDK提供的集合API都包含在 java.util 包内。
- 集合框架两大分支:Collection接口和Map接口
- 下面是Collection集合和Map集合的示意图
在这里有ArrayList和Vector直接实现了List接口;HashSet和LinkedHashSet直接实现了Set接口
HashMap和LinkedHashMap直接实现了Map接口
2.ArrayList中常用的方法总结
- ①add(Object element) :向列表的尾部添加指定的元素,该方法一次只能添加一个元素
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();
list.add("Tom");
}
}
- ②size() :返回列表中的元素个数
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();
list.add("Tom");
list.add("Jim");
int length=list.size();
System.out.println(length);
}
}
上述代码的运行结果为2,即此时返回列表中的元素个数为两个
- ③get(int index) :获取指定索引(从0开始)位置的元素
package list;
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(1));
}
}
此时代码的运行结果为:“Jim”,此时的get(index):Object java.util.ArrayList.get(int index)
- ④clear() :从列表中移除所有元素,即为清空list集合中的所有元素
package list;
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();
int length=list.size();
System.out.println(length);
}
}
此时上述代码的运行结果为0;
- ⑤isEmpty() 判断列表是否包含元素,不包含元素则返回 true,否则返回false
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("Tom");
list.add("Jim");
System.out.println(list.isEmpty());
list.clear();
System.out.println(list.isEmpty());
}
}
此时运行结果为输出:
- ⑥remove(int index) :删除指定索引(从0开始)位置的元素,并将元素返回,后面位置的元素前移
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("Tom");
list.add("Jim");
System.out.println(list.remove(0));
System.out.println(list.get(0));
}
}
此时前后两次的输出结果分别是“Tom”和“Jim”
- ⑦remove(Object o):删除list集合中的元素,返回boolean,若删除成功为true,否则为false;并将后面元素前移
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("Tom");
list.add("Jim");
System.out.println(list.remove("Tom"));
System.out.println(list.get(0));
}
}
此时的运行结果:
- ⑧add(int index, Object element) 在指定位置添加元素,并将原来位置的元素后移
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("Tom");
list.add("Jim");
list.add(0, "White");
System.out.println(list.get(0));
System.out.println(list.get(2));
}
}
此时可以得到的结果为:
- ⑨set(int i, Object element) 将索引i位置元素替换为元素element并返回被替换的元素,即为替换指定位置的元素
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("Tom");
list.add("Jim");
list.set(0, "White");
System.out.println(list.get(0));
}
}
此时得到的运行结果即为“White”
- ⑩iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器
package list;
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
Iterator<String> iterator=list.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
在这里,第七行代码Iterator<String> iterator=list.iterator();是将list集合中的元素转到iterator变量中,while判断语句中,是判断当前“指针”下面是否还有元素,如果指针下面有元素,则移动指针并获取相应位置的元素。
- 补充说明一点:
集合也可以像数组一样遍历,因为集合的底层代码是数组,下面我们先来看一段代码:
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("Tom");
list.add("Jim");
for (int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
for(String name: list) {
System.out.println(name);
}
}
}
此时的运行结果为:
- 11.contains(Object o):即为用来判断集合容器中是否含有参数元素,如果列表包含指定的元素,则返回 true,否则为false
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("Tom");
list.add("Jim");
boolean flag = list.contains("Jim");
System.out.println(flag);
}
}
思考:判断过程是什么?真正执行的ArrayListcontains方法,该方法源码如下:
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]))
return i;
}
return -1;
}
由该源码我们不难看出,此时的o为我们传入的String类型的“Jim”,在o前面又有一个Object修饰,我们由此可以知道,此时的o为一个上转型对象,里面放的是“Jim”,在执行后面代码的时候,此时的if (o.equals(elementData[i]))这里就是一个多态,表面上调用的是父类Object,实质上是调用的String类。