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); }