一.Set接口
1.Set集合由Set接口和Set接口的实现类组成。Set接口继承了Collection接口,因此包含Collection接口的所有方法。
要使用Set集合,通常情况下需要声明为Set类型,然后通过Set接口的实现类来实例化。
Set接口的实现类语法格式为: Set<数据类型> 集合名=new 实现类<数据类型>();
由于Set集合中的对象是无序的,遍历Set集合的结果与插入Set集合的顺序并不相同;并且Set没有索引,不保存重复值。
Set接口的实现类常有HashSet和TreeSet类。
语法格式为: Set<数据类型> 集合名=new HashSet<数据类型>();
Set<数据类型> 集合名=new TreeSet<数据类型>();
HashSet:无序的集合,可以保存null;
TreeSet:经过排序(元素内容的升序)的无序(添加的顺序)集合,不能保存null,内部调用了TreeMap。
2.方法
(1)add(数据);(2)清除:remove(对象),clear();(3)遍历:foreach,迭代器。
Set接口的实现用法:
1 package org.hanqi.array;
2
3 import java.util.*;
4
5 public class Test2 {
6
7 public static void main(String[] args) {
8
9 //哈希
10
11 Set<String> s=new HashSet<String>();
12
13 HashSet<String> s1=new HashSet<String>();
14
15 if(s.add("a"))
16 {
17 System.out.println("保存a成功");
18 }
19
20 s.add("a");
21 s.add("b");
22 s.add("c");
23 s.add("d");
24 s.add("e");
25 s.add("f");
26 s.add("g");
27
28 s.add(null);
29
30 if(!s.add("a"))
31 {
32 System.out.println("保存a失败");
33 }
34 s.add("a");
35 s.add("a");
36
37
38 for(String t:s)
39 {
40 System.out.println(t);
41 }
42
43 System.out.println("s的size="+s.size());
44
45 if(s.remove("b"))
46 {
47 System.out.println("移除成功");
48 }
49 else
50 {
51 System.out.println("移除失败");
52 }
53
54 System.out.println("s的size="+s.size());
55
56
57 //迭代器
58 Iterator<String> it=s.iterator();
59
60 while(it.hasNext())
61 {
62 String t=it.next();
63
64 // if(t.equals("c"))
65 // {
66 // it.remove();
67 // }
68 // else
69 // {
70 // System.out.println(t);
71 // }
72 }
73 System.out.println("s的size="+s.size());
74
75
76
77 System.out.println("TreeSet");
78
79 Set<String> s2=new TreeSet<String>();
80
81 s2.add("a");
82 s2.add("f");
83 s2.add("c");
84 s2.add("b");
85 s2.add("e");
86 s2.add("d");
87 s2.add("g");
88
89 //s2.add(null);
90
91 for(String t:s2)
92 {
93 System.out.println(t);
94 }
95
96
97 }
98
99 }
Set
二.Map接口
Map接口提供了将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
由于Map集合中的元素是通过key、value进行储存的,要获取集合中指定的key值或value值,需要先通过相应的方法获取key集合或value集合,在遍历key集合或value集合获取指定值。
Map接口常用的实现类有HashMap和TreeMap。通常建议使用HashMap实现类实现Map集合,因为由HashMap类实现的Map集合对于添加或删除映射关系效率更高。HashMap是基于哈希表的Map接口实现,HashMap通过哈希码对其内部的映射关系进行快速查找;由HashMap类实现的Map集合对于添加或删除映射关系效率较高;而TreeMap中的映射关系存在一定的顺序,如果希望Map集合中的对象存在一定的顺序,应该使用TreeMap类实现Map集合。
1.HashMap类
该类基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希码对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是不保证该顺序恒久不变。
2.TreeMap类
该类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此集合中的映射关系具有一定的顺序。但在添加、删除和定位映射的关系上。TreeMap类比HashMap类的性能差一些。由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象是null。
可以通过HashMap类创建Map集合,当需要顺序输出时,在创建一个完成相同映射关系的TreeMap类实例。
语法格式为: Map<key,value> Map名=new 实现类<key,value>();
3.方法
(1)put(key,value) 添加;(2)get(key) 获取;(3)size() 长度;(4)移除:remove(key),clear();(5)判断:containsKey(key) key是否存在,containsValue(value) value是否存在;(6)遍历:KeySet() Key的Set集合;foreach:for(Key : KeySet){get(Key)}。
4.Map方法图
Map接口实现方法:
1 package org.hanqi.array;
2
3 import java.util.*;
4
5 public class Test3 {
6
7 public static void main(String[] args) {
8
9
10 Map<String,String> m=new HashMap<String,String>();
11
12 m.put("0533","淄博");
13 m.put("0531","济南");
14 m.put("0532","青岛");
15
16 System.out.println("长度="+m.size());
17
18 m.put("0534","青岛");
19
20 m.put(null, null);
21
22 //长度
23 System.out.println("长度="+m.size());
24
25 //根据key获取value
26 System.out.println("0533="+m.get("0533"));
27
28
29 //key是否存在
30 if(m.containsKey("0533"))
31 {
32 System.out.println("key 0533 已存在");
33 }
34 //value是否存在
35 if(m.containsValue("淄博"))
36 {
37 System.out.println("value 淄博 已存在");
38 }
39
40 //遍历
41 for(String k:m.keySet())
42 {
43 System.out.println(k+"="+m.get(k));
44 }
45
46 }
47
48 }
Map
小结: