集合类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+" ");
        }
        

    }

}
TreeSet、HashSet

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));
        }
        

    }

}
HashMap、TreeMap

 技术分享

以上是关于集合类Set\Map的主要内容,如果未能解决你的问题,请参考以下文章

Java 集合类 List Set Map 线程安全

Java集合类 List Set Map

Java中的集合类(List,Set.Map)

集合类

ArrayList,LinkedList,Vector,Set,Map,List,HashMap,HashTable

ListSetMap常见集合遍历总结