Set集合

基本概念

java.util.Set接口是Collection接口的子接口,与List接口是平级关系
该接口与List接口相比元素没有先后次序,并且不允许有重复的元素。无序且唯一
该接口的主要实现类:HashSet类 和 TreeSet类
其中HashSet类的底层是采用哈希表进行数据管理的
其中TreeSet类的底层是采用有序二叉树进行数据管理的

常用的方法

其实Set集合好多方法都是从Collection中继承过来的,所以常用方法参照Collection集合

Iterator<E> iterator() 获取当前集合中的迭代器对象,用于迭代/遍历集合中所有元素
其中Iterator是个接口,常用方法如下:
boolean hasNext() 用于判断是否拥有可以访问的元素
E next() 用于取出一个元素并指向下一个位置
void remove() 用于将刚刚取出的元素删除

小知识—forEach循环

  • 语法格式
    for( 元素类型 变量名 : 集合/数组的名称){ 循环体; }
    • 执行流程
      不断地从集合/数组中取出一个元素赋值给变量后执行循环体,直到处理完毕所有元素为止
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// Set集合常用方法使用
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestSet {

public static void main(String[] args) {

// 1.声明Set接口的引用指向实现类的对象,形成了多态
Set<String> s1 = new HashSet<String>();

// 2.向集合中添加元素内容
boolean b1 = s1.add("two");
System.out.println("b1 = " + b1); // true
System.out.println("s1 = " + s1); // [one, two]
b1 = s1.add("one");
System.out.println("b1 = " + b1); // true
System.out.println("s1 = " + s1); // [one]
b1 = s1.add("three");
System.out.println("b1 = " + b1); // true
System.out.println("s1 = " + s1); // [one, two, three]
b1 = s1.add("one");
System.out.println("b1 = " + b1); // false
// 自动调用toString()方法,得到String类型的整体
System.out.println("s1 = " + s1); // [one, two, three]

System.out.println("-------------------------");
// 3.使用迭代器来访问集合中的每个元素并打印出来
// 3.1 获取迭代器对象并记录
Iterator<String> it1 = s1.iterator();
/*
// 3.2 判断是否拥有可以访问的元素
System.out.println(it1.hasNext()); // true
// 3.3 取出该元素并并打印出来然后指向下一个位置
System.out.println("获取到的元素是:" + it1.next()); // one

// 3.2 判断是否拥有可以访问的元素
System.out.println(it1.hasNext()); // true
// 3.3 取出该元素并并打印出来然后指向下一个位置
System.out.println("获取到的元素是:" + it1.next()); // two
*/
while(it1.hasNext()){
System.out.println("获取到的元素是:" + it1.next()); //one two three
}

//练习:使用StringBuilder类和迭代器实现toString()方法的打印效果
StringBuilder sb1 = new StringBuilder();
sb1.append("[");
//重新获取迭代器,也就是让迭代器回到开头位置
it1 = s1.iterator();
//将集合中每个元素取出来拼接字符串
while(it1.hasNext()){
String str = it1.next();
//若处理最后一个元素时,直接连接元素和]
/*
if(!it1.hasNext()){
sb1.append(str).append("]");
}else{
sb1.append(str).append(",").append(" ");
}
*/
if(it1.hasNext()){
sb1.append(str).append(",").append(" ");
}else{
sb1.append(str).append("]");
}
}
//将最后一个元素后面的逗号和空格删除
//sb1.delete(sb1.length()-2, sb1.length());
//拼接最后的]
//sb1.append("]");
System.out.println("s1 = " + sb1);

System.out.println("-------------------------");
//4.实现集合中元素的删除操作
System.out.println("s1 = " + s1); //[one, two, three]
//使用迭代器获取集合中的每个元素并判断,若是"two"则删除否则打印即可
//重新获取迭代器,也就是让迭代器回到开头位置
it1 = s1.iterator();
while(it1.hasNext()){
//切记next()方法会取出元素的同时指向下一个位置
/*
if(it1.next().equals("two")){
//调用迭代器的remove()方法可以删除元素
it1.remove();
}else{
System.out.println(it1.next());
}
*/
String str2 = it1.next();
if("two".equals(str2)){
//调用迭代器自己的remove()方法删除元素
it1.remove();
//调用Set集合自己的remove()方法删除元素
//s1.remove(str2); //编译ok,运行产生异常
}else{
System.out.println(str2);
}
}

System.out.println("-------------------------");
System.out.println("删除之后的结果是:" + s1); //[one, three]

System.out.println("-------------------------");
//5.使用forEach循环来打印集合s1中的所有元素,推荐使用
for(String ts : s1){
System.out.println(ts);
}

System.out.println("-------------------------");
//使用forEach打印数组中的所有元素
int[] arr = {11, 22, 33, 44, 55};
for(int ti : arr){
System.out.println(ti);
}

}

}


10月      Java

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!