HashSet

2019-01-24  本文已影响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;
    }
上一篇下一篇

猜你喜欢

热点阅读