HashSet

作者: 蚂蚁绊倒象 | 来源:发表于2019-01-24 16:20 被阅读10次

    HashSet是Set接口的实现类,储存的是无序、唯一的对象。由于是无序的所以每组数据都没有索引,很多list可用的方法他都没有,凡是需要通过索引来进行操作的方法都没有,所以也不能使用普通for循环来进行遍历,只有加强型for和迭代器两种遍历方法。

    主要方法
    add():只有set中尚未包含指定元素,则添加指定元素返回true,否则添加失败返回false。
    remove():如果指定元素存在于此 set 中,则将其移除。底层使用HashMap的remove方法删除指定的Entry。
    contains():判断某个元素是否存在于set中。
    clone():调用返回这个集合的浅表副本。

    示例代码:

        HashSet<String> set = new HashSet<>();
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("c");//之前有则添加会失败
        set.add("是否包含c:"+set.contains("c"));
        set.add("d是否在集合中:"+"d".equals(set));
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            LogU.i("MainActivity -->", "TreeSet: " + set.size() + " : " + next + ",hashcode值为:" + next.hashCode() + "");
        }
        //HashSet<String> cloneset = new HashSet<String>();
        HashSet cloneset = (HashSet) set.clone();
        System.out.println("原数据:" + set);
        System.out.println("克隆数据:" + cloneset);
    

    打印结果:

    TreeSet: 5 : d是否在集合中:false,hashcode值为:97196323
    TreeSet: 5 : a,hashcode值为:97
    TreeSet: 5 : b,hashcode值为:98
    TreeSet: 5 : 是否包含c:true,hashcode值为:3569038
    TreeSet: 5 : c,hashcode值为:99
    原数据:[false, a, b, true, c]
    克隆数据:[a, false, b, c, true]
    

    试题:找到字符串中第一个重复出现的字符

        private char getChar(String str) {
            HashSet hashSet = new HashSet();
            char[] chars = str.toCharArray();
            for (int i = 0; i < str.length(); i++) {
                if (!hashSet.add(chars[i])) {
                    //添加失败,说明之前已经存在了
                    return chars[i];
                }
            }
            return 0;
        }
    

    相关文章

      网友评论

          本文标题:HashSet

          本文链接:https://www.haomeiwen.com/subject/zccujqtx.html