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); } }
}
|