一、集合
集合是一种容器,可以放置一系列类对象(基本类型不可以),可以实现的功能(增删查)要优于数组,下面是集合的分类图:
如图所示:Collection集合接口有两个子接口分别为:List、Set
List中又有两个实现子类: ArrayList、Vetor;
Set接口中又有两个实现子类: TreeSet、 HashSet;
二、ArrayList 集合的创建
import java.util.ArrayList;
public class Csdn {
public static void main(String[] args) {
ArrayList arrayList =new ArrayList<>();
}
}
1、引包(java.util.ArrayList)
2、创建集合(ArrayList arrayList =new ArrayList<>())
与数组相似,定义的集合索引从零开始
3、泛型:
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add(new Csdn());
}
}
在ArrayList后面<引用类型>可以定义创建集合中的类型:如图所示,由于括号中定义的类型为String,此时arrayList.add(new Csdn())类型不匹配,错误;
默认的泛型为:Object类
三、ArrayList 中的方法
1、add(Object)、get(int)、add(int , Object) 添加
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
System.out.println(arrayList.get(0));
}
}
add(泛型)中的作用是在末尾添加一个新的元素进入集合中
get ( int ) 该方法的作用是得到集合中特定位置的元素:如图,意思即使得到第一个元素
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
arrayList.add(0,"lucy");
System.out.println(arrayList.get(1));
}
add(int , Object)的作用是插入一个元素进入集合: 如上面的代码 arrayList.add(0,"lucy")即将lucy这个字符串插入到集合索引为零的位置上,原本的数据进行后移移位
2、set(int ,Object) 替换
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
arrayList.set(1, "lucy");
System.out.println(arrayList.get(1));
}
}
set(int ,泛型)方法是将特定索引位置的数据进行替换,不改变其他数据的值;上图的执行结果为:lucy
3、contain(Object)、isEmpty()判断 content(泛型):检查集合中是否存在指定泛型: 上图代码:因为集合中存在"Tom"字符串,因此输出:true(返回值为Boolean)
思考:contain(Object)是怎么执行的?
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;
}
contains关键是将“Tom”的值传进去,此时作为上转型对象处理,在对其使用o.equals(elementData[i])使其与集合中的每一个元素进行比较,通过返回值判断是否在集合中存在
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
System.out.println(arrayList.isEmpty());
}
}
isEmpty()是判断集中是否为空,是则返回true;
4、remove(int)、remove(Object)、clear()、size() 移除
import java.util.ArrayList;
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
arrayList.remove(0);
System.out.println(arrayList.get(0));
}
}
remove(int):根据索引来移除集合中的元素,并且使后面的元素向前移动:可以看出上述在代码在一处索引为0的元素后在进行一次输出后的结果为:Jim 可以看出元素确实前移了
import java.util.ArrayList;
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
arrayList.remove("Tom");
System.out.println(arrayList.get(0));
}
}
remove(Object):通过内容来移除数据
import java.util.ArrayList;
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
arrayList.clear();
System.out.println(arrayList.size());
}
}
clear():清空集合数据 size()输出集合长度
四、ArrayList 遍历
import java.util.ArrayList;
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
for(int i=0;i<arrayList.size();i++) {
System.out.println(arrayList.get(i));
}
System.out.println("#########################3");
for (String string : arrayList) {
System.out.println(string);
}
}
}
代码中的两种输出格式在数组中也有所涉及
1、iterator方法
import java.util.ArrayList;
import java.util.Iterator;
public class Csdn {
public static void main(String[] args) {
ArrayList<String> arrayList =new ArrayList<String>();
arrayList.add("Tom");
arrayList.add("Jim");
Iterator<String> iterator=arrayList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
在ArrayList集合中存在Iterator()方法,可以将ArrayList集合类型装换为Iterator类型;Iterator中的两个方法可以很好的达到遍历的效果:
1、iterator.hasNext(): 判断是否有下一个数据
2、iterator.next():返回下一个数据的值并移动其中的“指针” 注:开始的"指针"为空