一.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 }
二.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 }
小结: