功能:Set集合可以用来去重.
操作:根据需要重写Hashcode() 和 equal()
原理:
1、先比较判断两个对象Object类的hashcode是否相等,然后调用Set的equals()函数判断是否相等。
学习示例1:
- 再举例子之前先看一个代码:
- String str1 =”ximen”;
- String str2 = new String(“ximen”);
- Set<String> set1 = new HashSet<String>();
- set1.add(str1);
- set1.add(str2);
- System.out.println(set1.size());
返回的是1,因为str1与str2有一样的字符串,虽然分属不同的内存空间,但Object自带的hashcode()和equals()判断是字符串,
学习示例2:
- 再举例子之前先看一个代码:
- String str1 =”ximen”;
- String str2 = new String(“ximen2”);
- Set<String> set1 = new HashSet<String>();
- set1.add(str1);
- set1.add(str2);
- System.out.println(set1.size());
返回的是2.因为字符串不同。
如果想判断不同的内存对象,可以重写hashcode()和equals(),
学习示例3:
- 再举例子之前先看一个代码:
- public class class1{
- String str1;
- String id;
- class1(String str1,String id){
- this.str1 = str1;
- this.id = id;
- }
- @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof class1)) return false;
class1 that = (class1) o;
if (str1!= that.str1) return false;
- return true;
} - @Override
public int hashCode() {
int result = (int) str1;
result = id * result;
return result;
} - }
- class1 cls1 = new class1("ximen","234");
- String cls2 = new class1("ximen","345");
- Set<String> set1 = new HashSet<String>();
- set1.add(str1);
- set1.add(str2);
- System.out.println(set1.size());
输出2