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