集合类Set\Map
Posted 一全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合类Set\Map相关的知识,希望对你有一定的参考价值。
Set接口的常用方法
Set集合由Set接口和Set接口的实现类组成的。Set接口继承了Collection接口,因此包含Collection接口的所有方法。Set接口中的常用方法如下图:
由于Set集合中不允许存在重复值,因此可以使用Set集合中的addAll()方法,将Collection集合添加到Set集合中并除掉重复值。
Set接口的实现类
要使用Set集合,通常情况下需要声明为Set类型,然后通过Set接口的实现类来实例化。Set接口的实现类常用的有HashSet和TreeSet类。语法格式如下:
Set<String>collSet=new HashSet<String>();
Set<String>collSet2=new TreeSet<String>();
由于Set集合中的对象是无序的,遍历Set集合的结果与插入Set集合的顺序并不相同。
package org.hanqi.array; import java.util.*; public class Test2 { public static void main(String[] args) { // int i; // int[]m=new int[5]; // set<int>d= //哈希 System.out.println("TreeSet"); Set<String>s=new HashSet<String>(); HashSet<String>s1=new HashSet<String>(); if(s.add("a")) { System.out.println("保存a成功"); } s.add("a"); s.add("b"); s.add("c"); s.add("d"); s.add("e"); s.add("f"); s.add("g"); s.addAll(null); if(!s.add("a")) { System.out.println("保存a失败"); } for(String t:s) { System.out.println(t+" "); } if(s.remove("k")) { System.out.println("移除成功"); } else { System.out.println("移除失败"); } System.out.println("s的size"+s.size()); Iterator<String>it=s.iterator(); while(it.hasNext()) { String t=it.next(); if(t.equals("c")) { it.remove(); } else { System.out.println(t); } } System.out.println("s的size"+s.size()); System.out.println("TreeSet"); Set<String>s2=new TreeSet<String>(); s2.add("b"); s2.add("a"); s2.add("c"); s2.add("g"); s2.add("e"); s2.add("f"); s2.add("d"); for(String t:s2) { System.out.println(t+" "); } } }
HashSet可以保存null,TreeSet不可以保存null,并且内部调用了TreeMap。
Map接口的常用方法
Map接口提供了将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。Map接口中同样提供了集合的常用方法,如clear()、isEmpty()、size()等除此之外还包括下图所示的常用方法
由于Map集合中的元素是通过key、value进行存储的,要获取集合中指定的key值或value值,需要先通过相应的方法获取key集合或value集合,再遍历key集合或value集合获取指定值。
Map接口的实现类
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类实例。
package org.hanqi.array; import java.util.*; public class Test3 { public static void main(String[] args) { Map<String, String>m=new HashMap<String, String>(); m.put("0533", "淄博"); m.put("0531", "济南"); m.put("0532", "青岛"); System.out.println("长度="+m.size()); m.put("0534", "青岛");//值可以重复,键不能重复 m.put(null, null); //长度 System.out.println("长度="+m.size()); //取出 System.out.println("0533="+m.get("0533")); //key是否存在 if(m.containsKey("0533")) { System.out.println("key 0533 已存在"); } //value是否存在 if(m.containsValue("淄博")) { System.out.println("value 淄博 存在"); } //遍历 for(String k:m.keySet()) { System.out.println(k+"="+m.get(k)); } } }
以上是关于集合类Set\Map的主要内容,如果未能解决你的问题,请参考以下文章