Set接口_HashSet常用方法[Java]

Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。我们在前面通过List学习的方法,在Set中仍然适用。因此学习Set的使用将没有任何难度。


接口

  • Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。我们在前面通过List学习的方法,在Set中仍然适用。因此学习Set的使用将没有任何难度。
  • Set容器特点:无序,不可重复。无序指Set中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。更确切地讲,新元素如果和Set中某个元素通过equals()方法对比为true,则不能加入;甚至,Set中也只能放入一个null元素,不能多个。
  • Set常用的实现有:HashSet,TreeSet等,我们一般使用HashSet。

HashSet方法


手动实现HashSet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package cn.set;

import java.util.HashMap;

/**
* 手动实现一个HashSet,更深刻理解HashSet底层原理
* @author HQF
*
*/

public class JhashSet {

HashMap map;
private static final Object PRESENT = new Object();

public JhashSet() {
map = new HashMap();
}

public int size() {
return map.size();
}

public void add(Object o) {
map.put(o,PRESENT);
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (Object key:map.keySet()) {
sb.append(key + ",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

public static void main(String[] args) {
JhashSet set = new JhashSet();
set.add("H");
set.add("u");
set.add("q");
set.add("i");
set.add(package cn.set;

import java.util.HashMap;

/**
* 手动实现一个HashSet,更深刻理解HashSet底层原理
* @author HQF
*
*/

public class JhashSet {

HashMap map;
private static final Object PRESENT = new Object();

public JhashSet() {
map = new HashMap();
}

public int size() {
return map.size();
}

public void add(Object o) {
map.put(o,PRESENT);
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (Object key:map.keySet()) {
sb.append(key + ",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

public static void main(String[] args) {
JhashSet set = new JhashSet();
set.add("H");
set.add("u");
set.add("q");
set.add("i");
set.add("A");
System.out.println(set);
}
}