Set集合

Set

1.1 特点(无序,唯一)

  1. 无序: 添加的数据顺序与所输出的顺序不一致;
	System.out.println("------------无序------------");
		//set集合
		Set<String> st = new HashSet<String>();
		//添加
		st.add("aa");
		st.add("bb");
		st.add("cc");
		for (String str : st) {
			System.out.println(str);
		
		//运行结果
		------------无序------------
		aa
		bb
		cc
  1. 唯一: 重复数据被过滤;
	System.out.println("------------唯一(是数据被过滤掉了)------------");
		st.add("aa");
		for (String str : st) {
			System.out.println(str);
		}
		//运行结果
		------------唯一(是数据被过滤掉了)------------
		aa
		bb
		cc
  1. 遍历一个对象
System.out.println("-----------对象-----------");
		//创建一个对象集合
		Set<Student> stu = new HashSet<Student>();
		stu.add(new Student(1,"liming","boy"));
		stu.add(new Student(2,"zhangsai","girl"));
		stu.add(new Student(3,"lisi","girl"));
		stu.add(new Student(3,"lisi","boy"));
		for (Student ss : stu) {
			System.out.println(ss);
		}
		
		//其中创建实体类代码 
		public class Student implements Serializable{
		private int sid;
		private String sname;
		private String sex;
		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 String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		}
		public Student(int sid, String sname, String sex) {
			super();
			this.sid = sid;
			this.sname = sname;
			this.sex = sex;
		}
		public Student() {
		}
		@Override
		public String toString() {
			return "Student [sid=" + sid + ", sname=" + sname + ", sex=" + sex + "]";
		}
		
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			//比较时把其他两个元素注释掉不然没有效果
			//result = prime * result + ((sex == null) ? 0 : sex.hashCode());
			//result = prime * result + sid;
			result = prime * result + ((sname == null) ? 0 : sname.hashCode());
			return result;
		}
		@Override
		public boolean equals(Object obj) {
			//判断当前对象与obj对象是否相同
				if (this == obj)
					return true;
			//判断obj对象是否为空		
				if (obj == null)
					return false;
			//判断当前对象类型与obj对象类型是否一致	
				if (getClass() != obj.getClass())
					return false;
				Student other = (Student) obj;
				if(this.getSname().equals(other.getSname()))
					return true;
			
			/*	if (sex == null) {
					if (other.sex != null)
						return false;
				} else if (!sex.equals(other.sex))
					return false;
				if (sid != other.sid)
					return false;
				if (sname == null) {
					if (other.sname != null)
						return false;
				} else if (!sname.equals(other.sname))
					return false;
				return true;
			}*/
}
//运行结果 
	-----------对象没有比较时-----------
	Student [sid=1, sname=liming, sex=boy]
	Student [sid=3, sname=lisi, sex=boy]
	Student [sid=3, sname=lisi, sex=boy]
	Student [sid=2, sname=zhangsai, sex=girl]
	-----------对象比较名字时(会去掉一个重复的)-----------
	Student [sid=1, sname=liming, sex=boy]
	Student [sid=3, sname=lisi, sex=boy]
	Student [sid=2, sname=zhangsai, sex=girl]
	-----------对象比较名字时(看是去掉哪一个改变其中一个性别)-----------
	Student [sid=1, sname=liming, sex=boy]
	Student [sid=3, sname=lisi, sex=girl]
	Student [sid=2, sname=zhangsai, sex=girl]

1.2 遍历(①foreach ②迭代器,没有for)

① foreach

	System.out.println("--------------foreach遍历---------------");
		for (String ss : st) {
			System.out.println(ss);
		}
		//运行结果
		--------------foreach遍历---------------
			aa
			bb
			cc

② 迭代器

System.out.println("--------------Iterator遍历---------------");
		Iterator it = st.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
		//运行结果
		--------------Iterator遍历---------------
			aa
			bb
			cc

1.3 常用实现类

HashSet

TreeSet

①.定义:根据某种(规则)对里面的元素进行排序
②自然比较接口:java.lang.Comparable

	System.out.println("---------------自然比较接口--------------");
		Set<Student> su = new TreeSet<Student>(new NameComparator());
		su.add(new Student(1,"lm","boy"));
		su.add(new Student(2,"kd","girl"));
		su.add(new Student(3,"as","girl"));
		for (Student s : su) {
			System.out.println(s);
		}
		//在实体类中加入代码 要实现序列化
		public class Student implements Serializable{}
		
		//排序
		public int compareTo(Object o) {
			Student stu = (Student) o;
			//升序
			return this.sid-stu.getSid();
			//降序
			return -(this.sid-stu.getSid());
		}
		//运行结果
		---------------自然比较接口--------------
		Student [sid=1, sname=cs, sex=girl]
		Student [sid=2, sname=fs, sex=boy]
		Student [sid=3, sname=as, sex=girl]

③比较器:java.util.Comparator

	System.out.println("---------------比较器---------------");
		Set<Student> su = new TreeSet<Student>(new SComparator());
		
		su.add(new Student(3,"as","girl"));
		su.add(new Student(2,"fs","boy"));
		su.add(new Student(1,"cs","girl"));
		for (Student s : su) {
			System.out.println(s);
		}
		//创建一个类
		import java.util.Comparator;
		
		public class NameComparator implements Comparator<Student> {
		
			//自然比较接口:java.util.Comparator
			public int compare(Student o1, Student o2) {
				//升序
				return o1.getSname().hashCode()-o2.getSname().hashCode() ;
			}
		
		}
		//运行结果
		---------------比较器---------------
		Student [sid=1, sname=cs, sex=girl]
		Student [sid=2, sname=fs, sex=boy]
		Student [sid=3, sname=as, sex=girl]

2.LinkedHashSet

:元素是有顺序的
:元素是不重复的
:底层数据结果按照链表的结构存储的Linked

HashCode

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值