Set集合

1.特点:无序、对象不能重复(eqauls)

 eqauls从Object继承,默认比较地址

2.遍历

Foreach

迭代器

3.常用实现类

HashSet

TreeSet:根据某种(规则)对里面的元素进行排序

    规则1:java.lang.Comparable

    规则2:java.util.Comparator

package com.zking.temp;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Demo01 {
public static void main(String[] args) {

//不可以重复 并且是无序的
//自然排序 按照A-Z

// Set<String> set = new HashSet<>();
// set.add("zs");
// set.add("ls");
// set.add("ww");
// set.add("qq");
// set.add("zs");
// System.out.println(set.size());
//
//
// 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 比较的是内存地址而不是对象的属性值
Set<Person> s = new HashSet<>();
s.add(new Person(1,"zs",18));
s.add(new Person(3,"ww",20));
s.add(new Person(2,"ls",19));
s.add(new Person(5,"qq",22));
s.add(new Person(4,"zl",21));
//foreach的底层原理就是迭代器
for (Person p : s) {
//默认转换为String的类型
System.out.println(p);
}
}
}

package com.zking.temp;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Demo02 {
public static void main(String[] args) {

// Set<String> set = new TreeSet<>();
// set.add("zs");
// set.add("ls");
// set.add("ww");
// set.add("qq");
// set.add("zs");
// System.out.println(set.size());
//
//
// Iterator<String> it = set.iterator();
// while(it.hasNext()) {
// System.out.println(it.next());
// }
// System.out.println("----------------------------------");
// for (String s : set) {
// System.out.println(s);
// }


//自然排序器
// Set<Person> s = new TreeSet<>();
// s.add(new Person(1,"zs",18));
// s.add(new Person(3,"ww",20));
// s.add(new Person(2,"ls",19));
// s.add(new Person(5,"qq",22));
// s.add(new Person(4,"zl",21));
// //foreach的底层原理就是迭代器
// for (Person p : s) {
// //默认转换为String的类型
// System.out.println(p);
// }

//自定义排序器
Set<Person> s = new TreeSet<>(new Age());
s.add(new Person(1,"zs",18));
s.add(new Person(3,"ww",200));
s.add(new Person(2,"ls",19));
s.add(new Person(5,"qq",22));
s.add(new Person(4,"zl",21));
//foreach的底层原理就是迭代器
for (Person p : s) {
//默认转换为String的类型
System.out.println(p);
}


}
}

package com.zking.temp;

public class Person implements Comparable<Person> {

private int sid;
private String sname;
private int sage;

public Person() {
super();
}

public Person(int sid, String sname, int sage) {
super();
this.sid = sid;
this.sname = sname;
this.sage = sage;
}

public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getSage() {
return sage;
}
public void setSage(int sage) {
this.sage = sage;
}

@Override
public int hashCode() {

return this.sid+this.sage;
}

@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 false;
}

@Override
public String toString() {
return "Person [sid=" + sid + ", sname=" + sname + ", sage=" + sage + "]";
}

@Override
public int compareTo(Person o) {

return this.sid-o.sid;
}





}

package com.zking.temp;

import java.util.Comparator;

public class Age implements Comparator<Person> {

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

}

原文地址:https://www.cnblogs.com/oneo/p/10904338.html