集合
•集合又称为容器,用于存储、提取、删除数据。JDK提供的集合API都包含在 java.util 包内,通过容器我们可以实现对于数据的增删查。
•集合框架两大分支:Collection接口和Map接口
其中Collection接口之中有两个重要接口——list接口和set接口。
对于set接口:会有一个抽象的实现类是AbstractSet类,而AbstractSet类中有TreeSet和HashSet类,其中HashSet类和其子类LinkHashSet类完全实现了Set接口。
对于List接口:会有一个抽象的实现类是AbstractList类,而AbstractList类中有ArrayList和Vector类,这两个子类都完全实现了List接口。
现在我们总结ArrayList常用方法集合
1、add方法,用于向list集合容器之中添加元素。
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();//创建一个列表
list.add("tom");//用于向List集合容器中添加元素
}
}
ArrayList list=new ArrayList<>();创建一个列表
2、size方法,用于获取集合中有多少个元素
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();//创建一个列表
list.add("tom");//用于向List集合容器中添加元素
int length=list.size();
System.out.println(length);
}
}
最后输出结果是1.
3、get方法,获取指定索引(从0开始)位置的元素
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();//创建一个列表
list.add("tom");//用于向List集合容器中添加元素
int length=list.size();
System.out.println(length);
System.out.println(list.get(0));
}
}
输出结果
1
tom
4、clear方法,清空List集合中的所有元素
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();//创建一个列表
list.add("tom");//用于向List集合容器中添加元素
int length=list.size();
System.out.println(length);
System.out.println(list.get(0));
list.clear();//清空List集合中的所有元素
length=list.size();
System.out.println(length);//输出0,进而说明clear用于清空集合元素
}
}
5、isEmpty方法,判断集合容器有没有元素。
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
boolean flag = list.isEmpty();//集合容器没有元素,则true
System.out.println(flag);
}
}
<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
6、contain方法,用来判断集合容器中是否含所有参数元素。
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
boolean flag = list.isEmpty();//集合容器没有元素,则true
System.out.println(flag);
list.add("Tom");
list.add("Jim");
String str = list.remove(0);//删除指定索引(从0开始)位置的元素,并将元素返回,并后面元素前移
System.out.println(list.get(0));
flag = list.contains("Jim");//用来判断集合容器中是否含所有参数元素
}
}
思考
判断过程是什么?真正执行的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;
}
首先,传入方法的是一个Object类,但是,显然我们在创建list列表的时候就把其类型规定了
ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
我们用泛型规定了list 的类型为String,因此这其实是一个隐藏的多态!
父类Object声明的对象指向了子类类型的变量。
因为list里面显然有数据,不等于null,因此进入else代码块,因此这里o.equal方法指向的是父类Object里面的equal方法,实际上运行的却是String类里面重写的equal方法。
7、remove方法,删除List集合元素,返回boolean,并让后面元素前移
•remove(Object o) 从List集合中移除第一次出现的指定元素,移除成功返回true,否则返回false。当且仅当List集合中含有满足(o==null ? get(i)==null : o.equals(get(i)))条件的最低索引i的元素时才会返回true。
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
boolean flag = list.isEmpty();//集合容器没有元素,则true
System.out.println(flag);
list.add("Tom");
list.add("Jim");
String str = list.remove(0);//删除指定索引(从0开始)位置的元素,并将元素返回,并后面元素前移
System.out.println(list.get(0));
flag = list.contains("Jim");//用来判断集合容器中是否含所有参数元素
list.remove("Tom");//删除List集合元素,返回boolean,并后面元素前移
System.out.println(list.get(0));
}
}
最后一行代码的输出结果是Jim
8、add(,)方法,在指定位置添加元素,原来位置的元素后置。
set(,)方法,替换指定位置的元素。
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
boolean flag = list.isEmpty();//集合容器没有元素,则true
System.out.println(flag);
list.add("Tom");
list.add("Jim");
String str = list.remove(0);//删除指定索引(从0开始)位置的元素,并将元素返回,并后面元素前移
System.out.println(list.get(0));
flag = list.contains("Jim");//用来判断集合容器中是否含所有参数元素
list.remove("Tom");//删除List集合元素,返回boolean,并后面元素前移
System.out.println(list.get(0));
list.add(0, "Kate");//在指定位置添加元素,原来位置的元素后置
System.out.println(list.get(1));
list.set(1, "Lucy");//替换指定位置的元素
System.out.println(list.get(1));
}
}
最后四行代码输出结果是
Jim
Lucy
集合遍历
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.get(0);
list.get(1);
//在数组中按照存入数据的先后顺序存储
int [] scores = new int[3];
scores[0] = 100;
scores[1] = 0;
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
for(String name:list) {
System.out.println(name);
}
}
}
简单的就是这两种,for循环和foreach。
用构造器iterator实现列表遍历
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.get(0);
list.get(1);
//在数组中按照存入数据的先后顺序存储
int [] scores = new int[3];
scores[0] = 100;
scores[1] = 0;
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
for(String name:list) {
System.out.println(name);
}
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
Iterator<String> iterator = list.iterator();——→将List集合中元素转到iterator变量中
iterator.hasNext()——→判断当前“指针”下面是否还有元素
System.out.println(iterator.next())——→如果指针下面有元素,则移动指针并获取相应位置的元素
如下图,本来hasNext方法中指针指向空位置,判断是下面否有数据,如果有返回ture,我们设定的对象之中显然是有的,因此执行while方法块里面的语句,即System.out.println(iterator.next()),iterator.next()的作用是输出下一个数据的值,然后指针往下移动一位,这是就形成循环,hasNxet又探测到下面有数据,方法再次执行,直到没有数据。