import java.util.ArrayList; |
02 | import java.util.HashSet; |
03 | import java.util.List; |
04 | import java.util.Set; |
05 | |
06 | /** |
07 | * 编写者:CP |
08 | * 编写日期:2011-9-7 |
09 | * <br />类描述:set集合针对String 类型和8大基础数据类型 过滤掉重复数据,如果存放的是其他类型对象,则需要重写hashCode方法和equals方法,当equals 比较相等时,则会去比较hashCode值 hashCode的值 如果一致的话,则不会存进set |
10 | */ |
11 | public class SetDemo { |
12 | |
13 | public static void main(String[] args) { |
14 | Set<String> nameSet = new HashSet<String>(); |
15 | nameSet.add( "张三" ); |
16 | nameSet.add( "李四" ); |
17 | nameSet.add( "王五" ); |
18 | nameSet.add( "张三" ); |
19 | |
20 | // 输出结果 张三 李四 王五 |
21 | for (String name : nameSet){ |
22 | System.out.print(name + "\t" ); |
23 | } |
24 | // List集合去除重复基础数据 |
25 | List<String> nameList = new ArrayList<String>(); |
26 | nameList.add( "张三" ); |
27 | nameList.add( "李四" ); |
28 | nameList.add( "王五" ); |
29 | nameList.add( "赵六" ); |
30 | nameSet.addAll(nameList); |
31 | |
32 | // 输出结果 张三 李四 王五 赵六 |
33 | for (String name : nameSet){ |
34 | System.out.print(name + "\t" ); |
35 | } |
36 | |
37 | // 去除编号和用户名一样的 对象,需要重写 equals 方法 和 hashCode方法 |
38 | User admin = new User( 1 , "admin" ); |
39 | User user = new User( 2 , "user" ); |
40 | User user1 = new User( 2 , "user" ); |
41 | User admin1 = new User( 3 , "admin" ); |
42 | |
43 | |
44 | Set<User> userSet = new HashSet<User>(); |
45 | userSet.add(admin); |
46 | userSet.add(user); |
47 | userSet.add(admin1); |
48 | userSet.add(user1); |
49 | // 输入结果 admin1 admin3 user2 |
50 | for (User u : userSet){ |
51 | System.out.print(u.username + u.id + "\t" ); |
52 | } |
53 | |
54 | System.out.println(user.equals( null )); |
55 | } |
56 | } |
57 | |
58 | class User{ |
59 | |
60 | protected Integer id; |
61 | |
62 | protected String username; |
63 | |
64 | public User(Integer id, String username){ |
65 | this .id = id; |
66 | this .username = username; |
67 | } |
68 | |
69 | |
70 | /** |
71 | * 如果对象类型是User 的话 则返回true 去比较hashCode值 |
72 | */ |
73 | @Override |
74 | public boolean equals(Object obj) { |
75 | if (obj == null ) return false ; |
76 | if ( this == obj) return true ; |
77 | if (obj instanceof User){ |
78 | User user =(User)obj; |
79 | // if(user.id = this.id) return true; // 只比较id |
80 | // 比较id和username 一致时才返回true 之后再去比较 hashCode |
81 | if (user.id == this .id && user.username.equals( this .username)) return true ; |
82 | } |
83 | return false ; |
84 | } |
85 | |
86 | |
87 | |
88 | /** |
89 | * 重写hashcode 方法,返回的hashCode 不一样才认定为不同的对象 |
90 | */ |
91 | @Override |
92 | public int hashCode() { |
93 | // return id.hashCode(); // 只比较id,id一样就不添加进集合 |
94 | return id.hashCode() * username.hashCode(); |
95 | } |
96 | |
97 | |
98 | } |
联系客服