1.Collection接口是层次结构中的跟接口。Collection接口通常不能直接使用,但该接口提供了添加元素,删除元素,管理数据的方法。
Collection通常使用矢代器(Iterator)来实现遍历集合。
代码:
import java.util.*;
public class Muster { // 创建类Muster
public static void main(String args[]) {
Collection<String> list = new ArrayList<>(); // 实例化集合类对象
list.add("a"); // 向集合添加数据
list.add("b");
list.add("c");
int Size = list.size();//返回int类型,获取该集合中元素的个数
Iterator<String> it = list.iterator(); // 创建迭代器
while (it.hasNext()) { // 判断是否有下一个元素
String str = (String) it.next(); // 获取集合中元素
System.out.println(str);
}
System.out.println(Size);
}
}
结果:
2.List集合:
List集合中的元素应许重复,各元素的顺序就是对象插入的顺序。
LIst接口继承了Collection接口,此外还定义了两个非常重要的方法:
get(int index): 获取指定索引位置的元素。
set(int index,Object obj) : 将集合中指定索引位置的对象改成指定的对象。
List接口的常用实现类有ArrayList 与 LinkedList。
a、ArrayList优点:随机访问速度快,缺点:删除或插入对象的速度慢。
b、LinkedList 正好相反。
代码:
import java.util.*;
public class Gather { // 创建类Gather
public static void main(String[] args) { // 主方法
List<String> list = new ArrayList<>(); // 创建集合对象
list.add("a"); // 向集合添加元素
list.add("b");
list.add("c");
int i = (int) (Math.random() * (list.size() - 1)); // 获得0~1之间的随机数
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));
}
System.out.println("最终集合中元素的个数:"+list.size());
//用矢代器遍历集合
Iterator<String>it = list.iterator();
while(it.hasNext()){
String str = (String)it.next();
System.out.println(str);
}
}
}
结果:
3.Set集合
Set集合不按特定的顺序排序,只是简单把对象加入到集合中,但不能包含重复对象。
Set接口常用的实现类有HashSet类与Tree类。Set继承了Comparable 接口。这个接口可参考JAVA API文档
a、HashSet类有哈希表,遍历的对象随机
b、TreeSet类遍历数组不仅可以按照自然顺序排序,还可以按照指定顺序排序。
代码:
import java.util.*;
public class UpdateStu implements Comparable<Object> {
String name;
long id;
public UpdateStu(String name, long id) {
this.id = id;
this.name = name;
}
public int compareTo(Object o) {
UpdateStu upstu = (UpdateStu) o;
int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
return result;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
UpdateStu stu1 = new UpdateStu("厦门", 00001);
UpdateStu stu2 = new UpdateStu("北京", 00002);
UpdateStu stu3 = new UpdateStu("上海", 00003);
UpdateStu stu4 = new UpdateStu("广州", 00004);
TreeSet<UpdateStu> tree = new TreeSet<>();
tree.add(stu1);
tree.add(stu2);
tree.add(stu3);
tree.add(stu4);
Iterator<UpdateStu> it = tree.iterator();
System.out.println("Set集合中的所有元素:");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
it = tree.headSet(stu2).iterator();
System.out.println("截取前面部分的集合:");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
it = tree.subSet(stu2, stu3).iterator();
System.out.println("截取中间部分的集合");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
}
}
结果:
补充:
细心的同学会发现上面的程序是继承 Comparable 这个类的,且里面用到了compareTo方法,这好似接口中的方法,可以重写该方法,返回的值就决定了Set集合遍历数组的排序。这就是TreeSet可以自定义排序的秘密所在。
/*例如:pojo复写了compareTo ()方法以后,对放入set集合的对象会根据compareTo ()方法的返回值进行排序,如果ast.height-this.height 为负值就是降序,以后每次比较正的放后面 负的放前面。*/
int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
/*三元运算: 如果 id>upstu,return 1 ,否则 return (id == upstu.id ? 0 : -1)*/
4.Map集合:
Map没有继承Collection接口,它是提供key到value的映射,来决定遍历对象的顺序。
注意每个key只能映射一个值。
代码:
先创建Emp,获得对象
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 void setE_id(String e_id) {
this.e_id = e_id;
}
public String getE_name() {
return e_name;
}
public void setE_name(String e_name) {
this.e_name = e_name;
}
}
在创建 MapText 遍历对象
import java.util.*;
public class MapText { // 创建类MapText
public static void main(String[] args) { // 主方法
Map<String,String> map = new HashMap<>(); // 由HashMap实现的Map对象
Emp emp = new Emp("001", "厦门");
Emp emp2 = new Emp("005", "上海"); // 创建Emp对象
Emp emp3 = new Emp("004", "北京");
map.put(emp.getE_id(), emp.getE_name());
map.put(emp2.getE_id(), emp2.getE_name()); // 将对象添加到集合中
map.put(emp3.getE_id(), emp3.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); // 遍历Map集合
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()) { // 遍历TreeMap集合对象
String str = (String) iter.next(); // 获取集合中的所有key对象
String name = (String) treemap.get(str); // 获取集合中的所有values值
System.out.println(str + " " + name);
}
}
}
结果:
补充:
使用Map集合需要先获取Map集合中的Key对象,再根据这个key映射对value进行遍历,key获取的顺序决定value排列的顺序。
Set<String> set = map.keySet(); // 获取Map集合中的key对象集合
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。