Set去重原理
Set是Java中的一个接口,它的实现类(如HashSet. TreeSet 等)用于存储一组不重复的元素。Set 的去重原理是基于元素的hashCode0)和equals)方法。
当向Set添加元素时,首先会调用被添加元索对象的hashCode0) 方法来获取其哈希码。Set 会根据哈希码判断元素是否已经存在于集合中。如果两个元素的哈希码相同,Set 还会进一步调用equals()方法比较两个元素是否相等。只有当hashCode()和equals()方法都判为相等时,Set 才视为重复元素而拒绝添加。
这样的设计可以保证Set中的元素唯一性, 因为相同的元素会具有相同的哈希码,并且通过equals() 方法进行详细比较确认相等性。
Set去重
@Test
public void f(){
Set set= new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String ("java");
set.add(s1);
set.add(s2);
set.add(s3);
set.add("aaa");
set.add("bbb");
System.out.println(set.size());
for (Object o :set){
System.out.println(o); //输出: 3 aaa java bbb
}
}
@Test
public void set02(){
Set set1= new HashSet();
set1.add(new Person(101,"张三"));
set1.add(new Person(101,"张三"));
set1.add(new Person(101,"张三"));
System.out.println("大小: "+set1.size());
for (Object o :set1){
System.out.println(o); //输出: 1
}
}
public class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
//set去重 必须重写equals和hashCode函数
@Override
public int hashCode() {
return Objects.hash(id,name);
}
@Override
public boolean equals(Object o) {
if(this ==o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return id == person.id && Objects.equals(name,person.name) ;
}
}
map遍历
@Test
public void map01(){
Map map = new HashMap();
map.put("US","美利坚");
map.put("JP","日本");
map.put("RU","俄罗斯");
System.out.println("大小: "+map.size());
Set set = map.keySet();
for (Object key : set){//set.for 回车
System.out.println(key + ":" + map.get(key) );
}
}
