Java中的HashSet和Set都是集合类,可以用来存储一组不重复的元素。其中HashSet是Set的一个子类,HashSet是基于HashMap实现的,它是一种哈希表,可以用来存储不同的对象。而Set是Java中一个接口,它定义了一些方法,比如添加元素、删除元素、判断集合是否为空等。
HashSet可以存储任何类型的对象,但是要注意的是,如果要将自定义类对象存储在HashSet中,需要重写类的equals()和hashCode()方法,否则无法识别元素是否重复。而对于基本类型,存储在HashSet中是没有问题的。
HashSet<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.add("apple");
System.out.println(set.size()); //输出3,因为重复的"apple"元素只存储了一次
上述代码中,我们创建了一个HashSet集合,添加了四个元素,其中有两个是重复的。由于HashSet集合不允许元素重复,因此只存储了一个"apple"元素,最终输出集合大小为3。
Set接口也提供了一些实现类,比如TreeSet、LinkedHashSet等。TreeSet是基于TreeMap实现的,它能够保证集合中的元素有序,默认按升序排列。而LinkedHashSet则是通过链表来维护元素的插入顺序,可以保证元素按照插入的顺序访问。
Set<String> set = new TreeSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.add("apple");
System.out.println(set); //输出[apple, banana, orange]
上述代码中,我们使用TreeSet来存储元素,由于TreeSet能够保证元素有序,因此输出的结果是按照字母排序的。同时,由于TreeSet不允许元素重复,因此只存储了一个"apple"元素。
总的来说,HashSet和Set都是Java中常用的集合类,它们在存储元素时都要一些特定的规则。我们需要根据具体的需求选择合适的集合类来使用。