集合--Set

集合Set下面有:HashSet TreeSet

hashSet:
1.集合内的元素顺序不确定,不是按照输入顺序来的
2.不允许添加重复元素.添加重复元素将会覆盖之前的元素
3,线程不同步,不安全.

TreeSet:
1.TreeSet集合是用来集合元素内部进行排序使用
2.线程不同步,

一些代码;
/**
*
*

  • @author dch

*/
//HashSet
public class TestHashSet {

public static void main(String[] args) {
	
	Set<String> set = new HashSet<String>();
	
	set.add("男1");
	set.add("女1");
	set.add("你好");
	set.add("加油");
	set.add("女1");
	//输出[女1, 你好, 男1, 加油];
	//说明了set集合是不可以重复的,并且无序的.
	//集合里面数据的个数
	System.out.println(set.size());
	System.out.println(set);
	
	//清空所有元素
	// set.clear();
	//使用迭代器遍历Set集合
	Iterator<String> setIt = set.iterator();
	//while 里面是查找是不是有下一个元素
	while(setIt.hasNext()){
		System.out.print(setIt.next()+",");
	}
	System.out.println();
	
	//foreach遍历
	for (String s : set) {
		System.out.print(s+",");
	}
	System.out.println();
	//如何此set包含指定元素,则返回true
	set.contains("男1");
	System.out.println(set.contains("男1"));
	
}

}
/**
*
*

  • @author dch

*/
//定义一个学生类
public class Student {

//姓名
private String name;
//学号
private int num;
//年龄
private int age;

//无参构造器
public Student(){
	
}

//有参构造器
public Student(String name,int num,int age){
	this.name = name;
	this.num = num;
	this.age = age;
}


//设置GET/SET方法
public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public int getNum() {
	return num;
}

public void setNum(int num) {
	this.num = num;
}

public int getAge() {
	return age;
}

public void setAge(int age) {
	this.age = age;
}

//重写toString方法
@Override
public String toString() {
	return "Student [name=" + name + ", num=" + num + ", age=" + age + "]";
}

}

/**
*
*

  • @author dch

*/
//HashSet
public class TestHashSet2 {

public static void main(String[] args) {
	
	Set  set = new HashSet();
	
	Student stu1 = new Student("杜", 1001, 22);
	Student stu2 = new Student("李", 1002, 21);
	Student stu3 = new Student("赵", 1021, 21);
	Student stu4 = new Student("王", 1004, 23);
	
	set.add(stu1);
	set.add(stu2);
	set.add(stu3);
	set.add(stu4);
	
	//foreach
/*	for (Object obj : set) {
		System.out.println(obj);
	}*/
	
	//使用迭代器遍历Set集合
			Iterator setIt = set.iterator();
			while(setIt.hasNext()){
				System.out.println(setIt.next());
			}
}

}

TreeSet:
我们在对对象进行比较大小的时候,并不是真的在比较对象,而是在比较对象里面的某些可以比较的属性,例如在Student对象中我们比较的就是学生的ID,因为每个学生对应一个ID,所以可以通过比较ID来比较对象.
/**
*

  • @author dch

*/
//TreeSet集合
//用来集合元素内部进行排序的使用的,

public class TestTreeSet {

public static void main(String[] args) {
	
//TreeSet  是一个可以排序的set集合	
TreeSet  set = new TreeSet();
//添加元素
set.add("hello");
set.add("123");
set.add("ff");
set.add("你好");
//元素的个数
System.out.println(set.size());
//foreach遍历
for (Object obj : set) {
	System.out.print(obj+"--");
	//输出123--ff--hello--你好--,会默认排序
}

System.out.println();

//返回此集合中最小元素大于或等于给定元素,
//如果没有此元素,则返回 null 
//System.out.println(set.ceiling(""));

//排序,1.对普通数据的自定义排序
//     2.必须指定,存储的数据是同一类,或者子类

TreeSet set2 = new TreeSet(new Comparator<String>() {

	@Override
	public int compare(String o1, String o2) {
		if(o1.compareTo(o2)>0){
			return -1;
		}else if(o1.compareTo(o2)<0){
			return 1;
		}
		return 0; 
		
		//return o1.compareTo(o2);
		// 排序规则     0 : 都相等  1: 前者>后者
	} 
});
set2.add("abc");
set2.add("abcd");
set2.add("bcd");
set2.add("abf");
System.out.println("set2的元素个数"+set2.size());

for (Object obj : set2) {
	System.out.print(obj+"--");
}


TreeSet set3 = new TreeSet(new Comparator<Integer>() {

	@Override
	public int compare(Integer o1, Integer o2) {
		if(o1>o2){
			return 1;
		}else if(o1<o2){
			return -1;
		}
		return 0; 
		
		//return o1.compareTo(o2);
		// 排序规则     0 : 都相等  1: 前者>后者
	} 
});
set3.add(123);
set3.add(129);
set3.add(120);
System.out.println("set3的元素个数"+set3.size());

for (Object obj : set3) {
	System.out.print(obj+"--");
	}

System.out.println();
//存储对象 
		TreeSet set4 = new TreeSet(new Comparator<Student>() {

			// 两个对象能比较大小吗 》不能,只能比较对象的属性 ,
			//比如这里比较的是Student的学号的大小,因为一个学生对应一个学号
			@Override
			public int compare(Student o1, Student o2) { 
				
				if(o1.getNum()>o2.getNum()){
					return 1;
				}else if(o1.getNum()<o2.getNum()){
					return -1;
				}
				// TODO Auto-generated method stub
				return 0;
			}
		});
		
		set4.add(new Student("杜", 1002, 22));
		set4.add(new Student("赵", 1009, 21));
		set4.add(new Student("李", 1005, 23));
		set4.add(new Student("王", 1008, 24));
		
		for(Object obj : set4){
			System.out.println((Student)obj);
		}

		
		
}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值