目录
Collection接口
- List和Set接口都继承了Collection接口,因此这些方法对List和Set集合是通用的
- 遍历通过iterator()方法返回迭代器,Iterator的next()返回的是Object
List集合
- 允许重复,有序,可用索引查询
- LIst接口继承了Collection接口,包含Collection中的所有方法,还包括两个重要的方法get(int index); 获取指定位置元素set(int index, Object obj); 将集合中指定位置对象修改为指定的对象
- 实例化List集合
- List<E> list = new ArrayList<>(); 可以根据索引快速随机访问,插入、删除删除速度慢
- List<E> list = new LinkedList<>(); 随机访问速度慢,插入、删除速度快
package ex14_Collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class Muster {
public static void main(String args[]) {
Collection<String> list = new ArrayList<>(); //实例化集合类对象
list.add("a");
list.add("b");
list.add("c");
Iterator<String> it = list.iterator(); //创建迭代器
while (it.hasNext()) { //判断是否还有下一个元素
String str = (String) it.next(); //获取集合中的元素
System.out.println(str);
}
//随机获取一个字母,删除索引为2的元素
List<String> list1 = new ArrayList<>(); //创建集合对象
list1.add("1");
list1.add("2");
list1.add("2");
int i = (int) (Math.random() * list.size());
System.out.println("随机访问:" + list1.get(i));
list1.remove("2"); // 删除对象
list1.remove(1); //删除索引位置的对象
for (int j = 0; j < list1.size(); j++) { //遍历集合
System.out.print(list1.get(j) + " ");
}
}
}
Set集合
- 不能重复,无序
- Set接口常用的实现类有HashSet类和TreeSet类
- HashSet不保证Set的迭代顺序,允许使用null元素
- TreeSet实现了Set接口,还实现了java.util.SortedSet接口,TreeSet类实现的Set集合在遍历时按照自然顺序递增排序,也可以按照指定比较器排序
- 存入TreeSet类实现的Set集合必须实现Comparable接口,该接口中的compareTo(Object o)方法比较此对象与指定对象的顺序
package ex14_Collection;
import java.util.Iterator;
import java.util.TreeSet;
public class UpdateStu implements Comparable<Object> { //创建类实现Comparable接口
String name;
long id;
public UpdateStu(String name, long id) {
this.name = name;
this.id = id;
}
public int compareTo(Object o) {
UpdateStu upstu = (UpdateStu) o;
int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
return result;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public static void main(String[] args) {
UpdateStu stu1 = new UpdateStu("李同学", 1011);
UpdateStu stu2 = new UpdateStu("陈同学", 1021);
UpdateStu stu3 = new UpdateStu("王同学", 1031);
UpdateStu stu4 = new UpdateStu("马同学", 1041);
TreeSet<UpdateStu> tree = new TreeSet<>();
tree.add(stu1);
tree.add(stu2);
tree.add(stu3);
tree.add(stu4);
Iterator<UpdateStu> it = tree.iterator(); //Set集合中的所有对象的迭代器
System.out.println("Set中所有元素:");
while (it.hasNext()) { //遍历集合
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
it = tree.headSet(stu2).iterator(); //截取stu2之前的对象
System.out.println("截取前面部分的集合:");
while (it.hasNext()) { //遍历集合
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
it = tree.subSet(stu2, stu4).iterator(); //截取stu2-stu4之间的对象
System.out.println("截取中间部分的集合:");
while (it.hasNext()) { //遍历集合
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
}
}
Map集合
- Map接口没有继承Collection接口,提供的是key到value的映射,Map中不能包含相同的key
- Map接口常用的实现类有HashMap和TreeMap
- HashMap是基于哈希表的Map接口的实现,添加删除映射关系效率高,允许使用null值和null键,不保证映射顺序
- TreeMap不仅实现了Map接口,还实现了java.util.SortedMap接口,集合中的映射关系有一定的顺序,因此键不允许为null,添加删除映射关系效率低
- keySet()返回Set集合,values返回Collection集合
- 可以通过HashMap创建Map集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap类实例
package ex14_Collection;
import java.util.*;
public class UpdateStu2 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>(); //创建Map实例
map.put("01", "李同学"); //向集合中添加对象
map.put("02", "魏同学");
map.put("03", "魏同学");
map.put("04", null); //会被打印出来
Set<String> set = map.keySet(); //构建Map集合中所有key对象的集合
Iterator<String> it = set.iterator(); //创建集合迭代器
System.out.println("key集合中的元素:");
while (it.hasNext()) {
System.out.println(it.next());
}
Collection<String> coll = map.values(); //构建Map集合中所有values值的集合
it = coll.iterator();
System.out.println("values集合中的元素");
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
package ex14_Collection;
public class Emp {
private String e_id;
private String e_name;
public Emp(String e_id, String e_name) {
this.e_id = e_id;
this.e_name = e_name;
}
public String getE_id() {
return e_id;
}
public String getE_name() {
return e_name;
}
public void setE_id(String e_id) {
this.e_id = e_id;
}
public void setE_name(String e_name) {
this.e_name = e_name;
}
}
package ex14_Collection;
import java.util.*;
public class MapText {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
Emp emp = new Emp("351", "张三"); //创建Emp对象
Emp emp2 = new Emp("512", "李四");
Emp emp3 = new Emp("853", "王一");
Emp emp4 = new Emp("125", "赵六");
Emp emp5 = new Emp("341", "黄七");
map.put(emp.getE_id(), emp.getE_name()); //添加对象到集合中
map.put(emp2.getE_id(), emp2.getE_name());
map.put(emp3.getE_id(), emp3.getE_name());
map.put(emp4.getE_id(), emp4.getE_name());
map.put(emp5.getE_id(), emp5.getE_name());
Set<String> set = map.keySet(); //获取Map集合中的key对象集合
Iterator<String> it = set.iterator();
System.out.println("HashMap集合类实现的Map集合,无序:");
while (it.hasNext()) {
String str = (String) it.next();
String name = (String) map.get(str);
System.out.println(str + " " + name);
}
TreeMap<String, String> treeMap = new TreeMap<>(); //创建TreeMap集合对象
treeMap.putAll(map);
Iterator<String> iter = treeMap.keySet().iterator();
System.out.println("TreeMap类实现的Map集合,键值升序:");
while (iter.hasNext()) {
String str = (String) iter.next();
String name = treeMap.get(str);
System.out.println(str + " " + name);
}
}
}