集合03

1.Set

1.1  特点:无序、对象不能重复(eqauls)     eqauls从Object继承,默认比较地址

 不可重复:输出值为4                    

public static void main(String[] args) {
        Set<String> set=new HashSet<>();
        set.add("zs");
        set.add("is");
        set.add("ww");
        set.add("qq");
        set.add("zs");
        System.out.println(set.size());
    }

无序:自然排序(A-Z)

public static void main(String[] args) {
        Set<String> set=new HashSet<>();
        set.add("zs");
        set.add("is");
        set.add("ww");
        set.add("qq");
        set.add("zs");            
    Iterator<String>     it=set.iterator();
    while(it.hasNext()) {
        System.out.println(it.next());
    }
    System.out.println("--------------------");
    for(String s:set) {
        System.out.println(s);
        
    }
    }

equals:比较的是内存的地址,而不是对象的属性(返回为false)

Set<Person> s=new HashSet<>();
        System.out.println(new Person(1,"zs",18));
        System.out.println(new Person(1,"zs",18));
        System.out.println(new Person(1,"zs",18).equals(new Person(1,"zs",18)));
//        s.add(new Person(1,"zs",18));
//        s.add(new Person(2,"zs",18));
//        s.add(new Person(3,"zs",18));
//        s.add(new Person(4,"zs",18));
//        s.add(new Person(5,"zs",18));
        System.out.println(s.size());
        

Person类:重写HashCode和equals(返回为false)

......................
@Override
    public int hashCode() {
        
        return this.sid+this.sage;
    }
    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
    

Person类:重写HashCode和equals(完成全部),判断(false  turn)

    @Override
    public boolean equals(Object obj) {
        boolean flag=false;
        //判断当前对象的类型(所属的自定义类的名称)
        if(obj instanceof Person) {
            Person p=(Person) obj;
            if (this.sid==p.sid) {
                if (this.sage==p.sage) {
                    if (this.sname==p.sname) {
                        flag=true;
                        
                    }
                    
                }
                
            }
            
        }
        return flag;
    }
    

自然排序器:

//自然排序器
    Set<Person> s=new TreeSet<>();
    s.add(new Person(1,"zs",18));
    s.add(new Person(2,"zb",19));
    s.add(new Person(3,"ww",20));
    s.add(new Person(4,"ls",21));
    s.add(new Person(5,"wx",22));
    
    for(Person p:s) {
        //默认转换为String的类型
        System.out.println(p);
    }
    
//person 类
@Override
    public int compareTo(Person o) {
        // TODO Auto-generated method stub
        
        return this.sid-o.sid;
    }

自定义排序器:新建一个类实现接口 永远返回的是int 

public class sage implements Comparator<Person>{

    @Override
    public int compare(Person o1, Person o2) {
        // TODO Auto-generated method stub
        return o1.getSage()-o2.getSage();
    }

}

2.Map

键值对  json格式 根据键名来获取对应的值

    public static void main(String[] args) {
        Map<String, Object>  map=new HashMap<>();
        map.put("zh", "中国");
        map.put("jp", "小日本");
        map.put("ua", "美国");
        map.put("EN", "英国");
        System.out.println(map);
    }
    
}

1, 重复的key会有什么样子的问题:key相同则覆盖values的值 以最后加入进去的值为真({jp=小日本, EN=英国, ua=美国, zh=大中国})

 public static void main(String[] args) {
        Map<String, Object>  map=new HashMap<>();
        map.put("zh", "中国");
        map.put("jp", "小日本");
        map.put("ua", "美国");
        map.put("EN", "英国");
         map.put("zh", "大中国");
        System.out.println(map);
    }
    
}

Entry: 代表单独的 ,每一个的,小的,元素

Map<Integer, Object> map=new HashMap<>();
        //避免出现重复的键
        for(int i=0; i<10; i++) {
            if(!map.containsKey(i)) {
                map.put(i, "z"+i);
            }
        }
        for(Entry<Integer, Object> emp:map entrySet()) {
            System.out.println("key"+emp.getKey()+"values:"+emp.getValue());
            
        }
        System.out.println(map);
    }
    
原文地址:https://www.cnblogs.com/xcn123/p/10905035.html