1 public class Demo1_Set { 2 3 /* 4 * set集合无序、不可重复、无索引 5 */ 6 public static void main(String[] args) { 7 8 //demo1(); 9 HashSet<Student> hs = new HashSet<>(); 10 hs.add(new Student("張三",19)); 11 hs.add(new Student("張三",19)); 12 hs.add(new Student("李四",20)); 13 hs.add(new Student("李四",20)); 14 hs.add(new Student("李四",20)); 15 System.out.println(hs); 16 /* 17 注意: 向集合中添加自定义类对象时,要想不添加重复的数据(如:同姓名、同年龄认为是同一个人),需要在自定义类中重写equals和hashCode方法 18 执行结果如下: 19 ----------------------- 20 執行了嗎 21 執行了嗎 22 執行了嗎 23 執行了嗎 24 [Student [name=李四, age=20], Student [name=張三, age=19]] 25 -------------------------------- 26 @Override 27 public boolean equals(Object arg0) { 28 System.out.println("執行了嗎"); 29 Student s = (Student) arg0; 30 return this.name.equals(s.name) && this.age == s.age; 31 } 32 33 @Override 34 public int hashCode() { 35 return 1; 36 } 37 */ 38 } 39 40 public static void demo1() { 41 HashSet<String> hs = new HashSet<>(); 42 boolean b1 = hs.add("a"); 43 boolean b2 = hs.add("a"); 44 boolean b3 = hs.add("c"); 45 boolean b4 = hs.add("d"); 46 boolean b5 = hs.add("e"); 47 boolean b6 = hs.add("f"); 48 49 System.out.println(b1); // true 50 System.out.println(b2); //false 51 System.out.println(hs); //[f, d, e, c, a] 52 for (String string : hs) { 53 System.out.print(string); //fdeca Set集合类有实现toString的方法,所以打印对象时是打印的值 54 } 55 } 56 57 } 58 59 -------------------------------------------------------------------------------- 60 61 public class Student implements Comparable<Student> { 62 private String name; 63 private int age; 64 65 @Override 66 public String toString() { 67 return "Student [name=" + name + ", age=" + age + "]"; 68 } 69 /* 70 * @Override public boolean equals(Object arg0) { System.out.println("執行了嗎"); 71 * Student s = (Student) arg0; return this.name.equals(s.name) && this.age == 72 * s.age; } 73 * 74 * 75 * @Override public int hashCode() { return 1; } 76 */ 77 78 public Student(String name, int age) { 79 super(); 80 this.name = name; 81 this.age = age; 82 } 83 84 @Override 85 public int hashCode() { 86 final int prime = 31; 87 int result = 1; 88 result = prime * result + age; 89 result = prime * result + ((name == null) ? 0 : name.hashCode()); 90 return result; 91 } 92 93 @Override 94 public boolean equals(Object obj) { 95 if (this == obj) 96 return true; 97 if (obj == null) 98 return false; 99 if (getClass() != obj.getClass()) 100 return false; 101 Student other = (Student) obj; 102 if (age != other.age) 103 return false; 104 if (name == null) { 105 if (other.name != null) 106 return false; 107 } else if (!name.equals(other.name)) 108 return false; 109 return true; 110 } 111 112 public String getName() { 113 return name; 114 } 115 116 public void setName(String name) { 117 this.name = name; 118 } 119 120 public int getAge() { 121 return age; 122 } 123 124 public void setAge(int age) { 125 this.age = age; 126 } 127 128 /* 129 * 优先比较姓名的长度,其次比较姓名的内容,再比较年龄 130 */ 131 @Override 132 public int compareTo(Student arg0) { 133 int length = this.name.length() - arg0.name.length(); 134 int num = length == 0 ? this.name.compareTo(arg0.name) : length; 135 return num == 0 ? this.age - arg0.age : num; 136 } 137 138 /* 139 * 优先按照姓名排序,之后再按照年龄排序 140 * 141 * @Override public int compareTo(Student arg0) { int num = 142 * this.name.compareTo(arg0.name); return num == 0 ? this.age - arg0.age : num; 143 * } 144 */ 145 146 /* 147 * 优先按照年龄排序,之后再按照姓名排序 148 * 149 * @Override public int compareTo(Student arg0) { int num = this.age - arg0.age; 150 * return num == 0 ? this.name.compareTo(arg0.name) : num; } 151 */ 152 153 } 154 155 ------------------------------------------------------------------------ 156 157 public class Demo2_Quchong { 158 159 /* 160 * 需求:将一个集合中的重复元素去除掉 161 * 分析: 162 * 1.获取一个拥有重复元素的list集合 163 * 2.将list集合中的元素添加到set集合中 164 * 3.将list集合中的元素清除 165 * 4.将获取到的set集合添加到清空了的list集合中 166 * 167 * LinkedHashSet 集合怎么存进去的就怎么取出来 168 * TreeSet 集合是可以对存进去的集合进行排序,同样也可以保证集合中元素的唯一行 169 */ 170 public static void main(String[] args) { 171 //* 1.获取一个拥有重复元素的list集合 172 ArrayList<String> list = new ArrayList<>(); 173 list.add("a"); 174 list.add("a"); 175 list.add("b"); 176 list.add("b"); 177 list.add("b"); 178 list.add("c"); 179 list.add("c"); 180 list.add("c"); 181 list.add("c"); 182 183 //通过方法去除重复元素 184 getSingle(list); 185 186 //打印list集合 187 System.out.println(list); 188 189 } 190 191 public static void getSingle(List<String> list) { 192 193 //2.将list集合中的元素添加到set集合中 194 LinkedHashSet<String> lhs = new LinkedHashSet<>(); 195 lhs.addAll(list); 196 197 //3.将list集合中的元素清除 198 list.clear(); 199 200 //4.将获取到的set集合添加到清空了的list集合中 201 list.addAll(lhs); 202 } 203 204 } 205 206 ------------------------------------------------------------------ 207 208 public class Demo3_Quchong { 209 210 /* 211 * 需求:通过键盘输入一串字符,然后去除重复,输出不同的字符 212 * 分析: 213 * 1.提示输入一串字符 214 * 2.将这一串字符转换成字符数组 215 * 3.将字符数组存入set集合 216 * 4.打印最终的结果 217 */ 218 public static void main(String[] args) { 219 //1.提示输入一串字符 220 Scanner sc = new Scanner(System.in); 221 System.out.println("请输入一串字符:"); 222 223 //2.将这一串字符转换成字符数组 224 String line = sc.nextLine(); 225 char[] ch = line.toCharArray(); 226 227 //3.将字符数组存入set集合 228 HashSet<Character> hs = new HashSet<>(); 229 for (Character character : ch) { 230 hs.add(character); 231 } 232 233 //4.打印最终的结果 234 System.out.println(hs); 235 236 } 237 238 } 239 240 ------------------------------------------------------------------- 241 242 public class Demo4_TreeSet { 243 244 /* 245 * TreeSet 集合自动对集合进行排序,同样也能满足集合中元素的唯一性 246 * 247 * 当自定义对象没有实现Comparable方法的时候,新增对象的时候会报类型转换异常 248 * 当compareTo方法返回值为 0 的时候,集合中只会有一个元素被存进去 249 * 当compareTo方法返回值为正数的时候,怎么存就怎么取 250 * 当compareTo方法返回值为负数的时候,取的时候会倒序去值 251 */ 252 public static void main(String[] args) { 253 //demo1(); 254 //demo2(); 255 //demo3(); 256 TreeSet<String> ts = new TreeSet<>(new CompareByLen()); 257 ts.add("aaaaaaaa"); 258 ts.add("b"); 259 ts.add("cc"); 260 ts.add("avb"); 261 ts.add("nba"); 262 System.out.println(ts); 263 } 264 265 public static void demo3() { 266 TreeSet<Student> ts = new TreeSet<>(); 267 ts.add(new Student("zhangsan", 23)); 268 ts.add(new Student("lisi", 33)); 269 ts.add(new Student("zhaoliu", 43)); 270 ts.add(new Student("wangwu", 13)); 271 ts.add(new Student("aaaa", 13)); 272 System.out.println(ts); 273 } 274 275 public static void demo2() { 276 TreeSet<Student> ts = new TreeSet<>(); 277 ts.add(new Student("张三",23)); 278 ts.add(new Student("王五",22)); 279 ts.add(new Student("赵五",22)); 280 ts.add(new Student("李四",25)); 281 ts.add(new Student("赵六",20)); 282 System.out.println(ts); 283 } 284 285 public static void demo1() { 286 TreeSet<String> ts = new TreeSet<>(); 287 ts.add("c"); 288 ts.add("a"); 289 ts.add("b"); 290 ts.add("a"); 291 ts.add("b"); 292 ts.add("b"); 293 ts.add("a"); 294 295 System.out.println(ts); //[a, b, c] 296 } 297 298 } 299 300 class CompareByLen implements Comparator<String> { 301 302 @Override 303 public int compare(String s1, String s2) { 304 int num = s1.length() - s2.length(); 305 return num == 0 ? s1.compareTo(s2) : num; 306 } 307 308 }