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) );
}
}
Map练习 添加、移除、修改、遍历
@Test
public void map01() {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "张三丰");
map.put(2, "周芷若");
map.put(3, "汪峰");
map.put(4, "灭绝师太");
//1.遍历集合,并将序号与对应人名打印。
Set<Integer> set = map.keySet();
for (int i : set) {
System.out.println(i + ":" + map.get(i));
}
//2.向该map集合中插入一个编码为5姓名为李晓红的信息
map.put(5,"李晓红");
//3.移除该map中的编号为1的信息
map.remove(1);
//4.将map集合中编号为2的姓名信息修改为"周林"
map.put(2,"周林");
System.out.println("修改后:");
Set<Integer> set1 = map.keySet();
for (Object key : set1){
System.out.println(key + ":"+map.get(key) );
}
}