一、Java语言的java.util包中提供了一些集合类,这些集合类又被称为容器。提到容器不难会想到数组,集合类与数组的不同之处是,数组的长度是固定的,集合的长度是可变的;数组用来存放基本类型的数据,集合用来存放对象的引用。常用的集合有List集合,Set集合,Map集合,其中List与Set实现了Collection接口。各接口还提供了不同的实现类。上述集合类的继承关系如图所示:
Collection接口是层次接口中的根接口。构成Collection的单位,被称之为元素。Collection接口通常不能直接使用,但该接口提供了添加和删除元素、管理数据的方法。由于List接口都实现了Collection接口,因此这些方法对List集合和Set结合是通用的。
二 、List接口的实现类
要使用 List集合,通产情况下需要声明为List类型,然后通过List接口的实现类对集合进行实例化。List接口的实现类常用的有ArrayList与LinkedList。
1、ArrayList类
该类实现了可变的数组,允许所有的元素,包括Null。可以根据索引位置对集合进行快速的随机访问。缺点是向指定的索引位置插入对象或删除对象的速度较慢。语法格式如下:
List<String> list = new ArrayList<String>();
2、LinkedList类
该类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象,经常需要向集合中插入、删除对象时,使用LinkedList类实现的List集合的效率较好;但是对于随机访问集合中的对象使用LinkedList类实现List集合的效率较慢。语法格式如下:
List<String> list = new ArrayList<String>();
<span style="color:#000000;">package list;
import java.util.ArrayList;
import java.util.List;
public class Gather {
public static void main(String[] args) {
List list = new ArrayList(); //创建集合对象
int i = (int) (Math.random()*(list.size()-1)); //获得一个随机数
list.add("a");
list.add("b");
list.add("c");
System.out.println("随机获取数组中的元素:"+list.get(i));
list.remove(2);
System.out.println("将索引是‘2’的元素从数组中移除后,数组中的元素是:");
for(int j = 0;j<list.size();j++){
System.out.println(list.get(j)+"");
}
}
}</span>
运行结果如下:
<span style="color:#000000;">随机获取数组中的元素:a
将索引是‘2’的元素从数组中移除后,数组中的元素是:
a
b
</span>
三、Set接口的实现类
要使用set集合,通常情况下需要声明为Set类型,然后通过Set接口的实现类来实例化。Set接口的实现类常用的有HashSet和TreeSet类。语法格式如下:
Set<String> collSet = new HashSet<String>();
Set<String> collSet 1= new TreeSet<String>();
由于Set集合中的对象是无序的,遍历Set集合的结果与插入Set集合的顺序并不相同。
package list;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CollectionDemo {
public static void main(String[] args) {
Set<people> hashSet = new HashSet<people>();
hashSet.add(new people("陈同学",201111));
hashSet.add(new people("王同学", 201112));
hashSet.add(new people("李同学",201113));
Iterator<people> it = hashSet.iterator();
System.out.println("集合中的元素是:");
while(it.hasNext()){
people person = it.next();
System.out.println(person.getname()+""+person.getid_card());
}
}
}
运行结果如下:
集合中的元素是:
李同学201113
陈同学201111
王同学201112
四、Map接口的实现类
Map接口常用的实现类有HashMap和TreeMap。通常建议使用HashMap实现类实现Map集合,因为由HashMap类实现的Map集合对于添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速查找;由HashMap类实现的Map集合对于添加或删除映射关系效率较高;而TreeMap中的映射关系存在一定的顺序,如果希望Map集合中的对象存在一定的顺序,应该使用TreeMap类集合。
1、HashMap类
该类基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希码对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是不保证顺序恒久不变。
2、TreeMap类
该类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此集合中的映射关系具有一定的顺序。但在添加、删除、和定位映射关系上,TreeMap类比HashMap类的性能差一点。由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象是null。
可以通过HashMap类创建Map集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap类实例。