package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("Tom");//用于向List集合容器中添加元素
int len = list.size();//用于获取集合中有多少个元素
System.out.println(len);
System.out.println(list.get(0));//获取从零开始指定索引位置的元素
list.clear();//清空list集合中所有元素
}
}
package list;
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("one");
list.add("two");
String str = list.remove(0);//删掉指定索引元素,返回该元素,后面元素前移
flag = list.remove("two");//删掉List集合元素,返回Boolean,后面元素前移
list.add(0, "one");//在指定位置添加元素,原位置元素后置
System.out.println(list.get(0));//这里会输出one
flag = list.contains("two");//输出false,判断是否包含某元素
//思考:此处的判断过程是?
list.set(0,"three");//替换指定位置元素
}
}
remove这里有重载,我们查看一下内部代码
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,numMoved);
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
思考:其实真正执行的是ArrayList的equals方法,源码如下:
public boolean contains(Object o) {//上转型对象String->Object
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是上转型对象,这里调用的不是Object的equals方法而是String的,ArrayList底层是数组写的,这里的实质就是数组的遍历
return i;
}
return -1;
}
集合遍历的三种方法
for循环
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
for(int i = 0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}
foreach加强循环
package list;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
for(String str : list) {
System.out.println(str);
}
}
}
迭代器遍历
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>();//<String>叫泛型,可省略,默认是Object
list.add("one");
list.add("two");
Iterator iterator = list.iterator();//将list集合中的元素转到iterator变量中
while(iterator.hasNext()) {//迭代器最开始指向第一个元素前,
System.out.println(iterator.next());
}
}
}