Set、List、Map是常见的用来存储数据的集合,其中Set与List是Collection的子接口。
Collection表示一组对象的集合,这些对象也叫Collection的元素,JDK中不提供直接实现Collection的方法,而是通过它的子接口来实现,如Set和List。Collection接口的不同子接口根据其自身属性有不同的特点,他们或允许重复的值,或有序。
Map是键值对的集合,利用键映射到值。每个键在集合中具有唯一性,不能重复,且只能映射到一个值。
Set、List和Map的主要特点如下:
- Set是一个无序的集合,不允许重复值的存在;
- List是一个有序的集合,可存在重复值;
- Map是一个映射关系的集合。
Set
Set利用迭代器取出单个元素。
Set中的实现包括HashSet和TreeSet。
HashMap无序,允许存在null元素;
TreeSet使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序。
public class SetTest {
public static void main(String[] args) {
SetTest stest = new SetTest();
java.util.Collection sset = stest.getUserSet(3);
System.out.println("集合中共有"+sset.size()+"个元素");
java.util.Iterator<Student> it = sset.iterator();
while(it.hasNext()) {
Student st = it.next();
st.showInfo();
}
}
public java.util.Collection getUserSet(int UserCount){
Set sset = new HashSet();
for(int i = 0;i<UserCount;i++) {
Student stu = new Student("用户"+(i+1),i+1);
sset.add(stu);
}
return sset;
}
}
List
List是有序的Collection,可以根据元素的整数索引访问元素,并搜索列表中的元素,对列表中的元素进行精确控制。List允许存在重复的元素。
List的具体实现包括ArrayList、LinkedList、Vector等。
ArrayList通过大小可变数组的实现List,可根据索引访问列表;
LinkedList则是通过链表实现List,具有链表的特点;
Vector 通过可变数组实现,可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。
public class ListTest {
public static void main(String[] args) {
ListTest st = new ListTest();
java.util.List<Student> list = st.getUserList(5);
System.out.println("集合中的元素个数为:"+list.size());
Student stu = list.get(3);
stu.showInfo();
st.printList(list);
}
public void printList(java.util.List<Student> list) {
for(int i = 0;i<list.size();i++) {
Student stu = list.get(i);
stu.showInfo();
}
}
public java.util.List<Student> getUserList(int UserCount){
List userlist = new ArrayList();
for(int i = 0 ; i<UserCount;i++) {
Student stu = new Student("name"+(char)(i+65),i+1);
userlist.add(stu);
}
return userlist;
}
}
Map
Map是一个接口,它不是collection的子接口或实现类,通过键值对实现数据的存储。Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
Map的主要实现方法包括TreeMap和HashMap。
TreeMap实现根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,可明确保证映射的顺序。
HashMap 是基于哈希表的Map实现,不保证映射的顺序,允许使用 null 值和 null 键。
public class MapTest {
public static void main(String[] args) {
MapTest mt = new MapTest();
Map<String,Student> map = mt.createUser(5);
mt.printmap(map);
String key = ""+2;
System.out.println("取出的Key为"+key+"对象信息是:");
Student stu = map.get(key);
stu.showInfo();
}
public java.util.Map<String,Student> createUser(int count){
java.util.Map map = new java.util.HashMap();
for(int i=0;i<count;i++) {
Student stu = new Student("name"+(char)(i+65),i+1);
map.put(""+i, stu);
}
return map;
}
public void printmap(Map<String,Student> map) {
java.util.Set<String> set = map.keySet();
java.util.Iterator<String> it = set.iterator();
while(it.hasNext()) {
String key = it.next();
Student stu = map.get(key);
stu.showInfo();
}
}
}