首先了解一下集合
集合又称为容器,可以增加、删除、查找数据,集合有两大分支:Collection接口和Map接口
下面讲一下Collection接口。Collection接口也有两个分支:List和Set.
List下有一个抽象类AbstractList,抽象类下又有两个接口实现类:ArrayList和Vector,Vector下还有一个Stack类,
Set下也有一个抽象类AbstractSet,抽象类下又有两个接口实现类:TreeSet和HashSet,HashSet下也有一个实现类LinkedHashSet,HashSet与LinkedHashSet直接实现了Set接口
现在总结ArrayList常用的方法:
1.add():用于向List集合中添加元素,代码如下:
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
}
}
ArrayList<String> list = new ArrayList<String>();
<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
list.add(12);
}
}
也可以ArrayList list = new ArrayList();或ArrayList list = new ArrayList<String>();
2. size() 用于获取集合中有多少个元素,代码如下
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
System.out.println(list.size());//输出1
}
}
3.get(int index) 获取指定索引(从0开始)位置的元素,代码如下
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
System.out.println(list.size());//输出1
System.out.println(list.get(0));//输出Tom
}
}
4.clear(),清空List集合中的所有元素,如
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
System.out.println(list.size());//输出1
System.out.println(list.get(0));//输出Tom
list.clear();
System.out.println(list.size());//输出0,进而说明clear用于清空集合中所有元素
}
}
5.list.isEmpty();判断list集合是否是空集合,如果是,则true,否,则false
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
list.clear();
System.out.println(list.size());//输出0,因为清空了集合中所有元素
System.out.println(list.isEmpty());//输出true,因为集合是空的
list.add("Tom");
System.out.println(list.isEmpty());//输出false
}
}
6.list.remove(int index),删除指定索引(从0开始)位置的元素,并将元素返回,并将后面元素前移
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
list.add("Jim");
System.out.println(list.remove(0));//输出删除的对象“Tom”,Jim前移
System.out.println(list.get(0));//输出Jim
}
}
7.list.remove(Object o);删除List集合元素,返回boolean(删除成功,返回true,否则返回false),并将后面元素前移。
(与上面的list.remove(int index)是重载)
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
list.add("Jim");
//System.out.println(list.remove(0));//输出删除的对象“Tom”,Jim前移
//System.out.println(list.get(0));//输出Jim
System.out.println(list.remove("Tom"));//输出true,因为集合中有“Tom”,如果没有Tom,则返回false
System.out.println(list.get(0));//输出Jim,因为Jim前移了
}
}
8. list.contains(Object o)用来判断集合容器中是否含有参数元素,如果含有,返回true,否则,false。如:
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
list.add("Jim");
System.out.println(list.contains("Jim"));//返回true
}
}
那么是如何进行判断的呢?分析如下
首先,将鼠标放在contains处,按住ctrl键同时点击contains,就会进入contains源代码处,源码如下
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;
}
代码分析:将"Jim"传给“o”,Jim是String类,而o是Object类,所以o就变成了一个上转型对象,指向其子类String类,o不等于null,所以执行else部分,然后看o.equals(elementData[i])部分,因为o是Object类,所以表面上是Object类的o调用equals方法(将鼠标放在contains处,按住ctrl键同时点击equals,进入Object类的equals方法),实际上是String类的Jim调用equals方法,即多态。
9.list.add(int index,Object element),在指定位置添加元素,原来位置的元素后置,如
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
list.add("Jim");
list.add(0, "Kate");
System.out.println(list.get(1));//输出Tom,因为Tom从0后置到了1
}
}
10.list.set(int index,Object element) 替换指定位置的元素
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Tom");
list.add("Jim");
list.add(0, "Kate");
System.out.println(list.get(1));//输出Tom,因为Tom从0后置到了1
list.set(0, "Lucy");
System.out.println(list.get(0));//输出Lucy,Lucy替换了Kate
System.out.println(list.remove("Kate"));//输出false,证明没有了Kate,即Lucy替换了Kate
}
}
集合遍历
我们知道数组有遍历,其实集合跟数组一样,也有遍历,下面我们就讲一讲集合遍历吧。看下面代码
package blogList;
import java.util.ArrayList;
public class List {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Tom");
list.add("Jim");
System.out.println(list.get(0));//会先输出Tom
System.out.println(list.get(1));//再输出Jim
}
}
可以看到,会先输出Tom,再输出Jim,就跟数组中一样,在数组中按照存入数据的先后顺序存储,在集合中也是这样,按照存入数据的先后顺序存储。所以,与数组中遍历一样,写下列代码,按顺序输出Tom和Jim
package blogList;
import java.util.ArrayList;
public class List {
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));
}
System.out.println("~~~~~~~~~~");
for (String name : list) {
System.out.println(name);
}
}
}
结果:
也可以用下面一个遍历,用到了ArrayList中的又一个方法
11.list.iterator() 用于将List集合中元素转到iterator变量中,代码如下
package blogList;
import java.util.ArrayList;
import java.util.Iterator;
public class List {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Tom");
list.add("Jim");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){//最初,“指针”指向首元素上面,iterator.hasNext()判断当前“指针”下面是否还有元素
System.out.println(iterator.next());//如果指针下面有元素,则移动指针并获取相应位置
}
}
}
可以看到与for循环结果一样,先输出Tom再输出Jim。类似于C语言中的指针(Java中没有指针)。