java中级——集合框架【3】-HashSet

HashSet

 

package cn.jse.hashset;

import java.util.HashSet;

public class TestCollection {

 

public static void main(String[] args) {

 

HashSet<String> names = new HashSet<>();

names.add("小明");

System.out.println("第一次插入数据:"+names);

 

//插入第二次同样的数据

names.add("小明");

System.out.println("第二次插入数据:"+names);

 

//结果发现如果插入相同的数据,是插不进的,容器只会保留一个

}

}

控制台:

 

结论就是set元素是不重复的,但是还有什么特点呢?——没有顺序

严格来说,HashSet是没有按照元素的插入顺序排序的。

...

HashSet<Integer> numbers = new HashSet<Integer>();

 

numbers.add(6);

numbers.add(1);

numbers.add(15);

 

System.out.println(numbers);

...

 

输出结果:[1, 6, 15]

还有就是因为Set不提供get()方法来获取指定位置的元素,所有遍历需要迭代器或者是增强型for循环

...

HashSet<Integer> numbers2 = new HashSet<Integer>();

for (int i = 0; i < 20; i++) {

           numbers2.add(i);

        }

System.out.println(numbers2);

 

//遍历Set可以采用迭代器iterator

        for (Iterator<Integer> iterator = numbers2.iterator(); iterator.hasNext();) {

            Integer i = (Integer) iterator.next();

            System.out.println("numbers2的数据:"+i);

        }

        

        //或者采用增强型for循环

        for (Integer i : numbers) {

            System.out.println("numbers的数据:"+i);

        }

...

 

 

我知道你是不是想问HashSetHashMap的关系?这不难回答,你可以观察一下HashSet的源码,其中:

private transient HashMap<E,Object> map;

可以发现HashSet自身并没有独立的实现,而是在里面封装了一个Map。HashSet是作为Map的key而存在的,而value是一个命名为PRESENT的static的Object对象,因为是一个类属性,所以只会有一个。

具体的HashMap的使用方式,有兴趣的同学看这里:Java基础——对象容器(顺序、集合、Hash)

posted @ 2017-05-12 14:15  lusCodding  阅读(202)  评论(0编辑  收藏  举报