java学习之set集合

    Set集合

      特点:无序(没有下标) 不重复

      HashSet: 去重的功能

      TreeSet: 排序的功能

  HashSet

  HashSet去重

private static void fun1() {
		//创建一个HashSet
		//保存ff aa bb dd
		HashSet<String> set=new HashSet<>();
		set.add("f");
		set.add("f");
		set.add("a");
		set.add("a");
		set.add("b");
		set.add("b");
		set.add("d");
		set.add("d");
		//有序:怎么存进去 打印出来就顺序
		/*迭代器遍历(遍历方法一)
		Iterator<String> iterator=set.iterator();
		while (iterator.hasNext()) {
			String next = iterator.next();
			System.out.println(next);	
		}*/
		//增强for循环(遍历方法二)
		for(String s:set) {
			System.out.println(s);
		}
	}最后打印出a b d f

  实现HashSet去重的功能

   重写HashCode

   只要创建对象,就给每一个对象分配一个HashCode码,当添加到set中的对象hashCode不相同的时,没有调用equals方法,并且对象直接存到Set集合中;当HashCode码相同的时候,会调用equals方法,来查看是否是同一个对象,是,就不存进去,反之。

   TreeSet

    是用来排序的

private static void fun1() {
		//创建一个TreeSet 添加几个数 查看效果
		TreeSet<Integer> set=new TreeSet<>();
		set.add(1);
		set.add(1);
		set.add(5);
		set.add(3);
		set.add(4);
		set.add(2);
		System.out.println(set);
	}//打印出来为[1,2,3,4,5]

   TreeSet

     存储规则

     小的数 放到左边(返回负数的情况)

     大的数 放到右边(返回正数的情况)

     返回的是0 就不存储


     输出规则

     以升序输出(打印)  

     TreeSet在存储的时候

     只跟compareTo方法的返回值有关

   compareTo方法的返回值

     返回0 只有一个元素

     返回正数 打印数据 正序输出

     返回负数 打印数据 倒序输出


   TreeSet排序步骤

  1.实现Comparable接口

public class Person implements Comparable<Person>{}

  2.重写接口中的compareTo()方法

@Override
	public int compareTo(Person o) {
		// TODO Auto-generated method stub
		return 0;
	}

  3.编写你想要的排序规则

@Override
	public int compareTo(Person o) {	
		int num=this.age-o.getAge();
		return (num==0)?this.name.compareTo(o.getName()):num;
	}

  创建比较器来进行排序

class StringLengthImpl implements Comparator<String>{
		//实现比较方法
	@Override
	public int compare(String o1, String o2) {
		int length=o1.length()-o2.length();
		//主要按长度 次要按字符串比较
		int num=o1.compareTo(o2);
		
		int rel=length==0?num:length;
		return rel==0?1:rel;
	}	
}
private static void fun3() {
		//集合中保存字符串 按字符串长度排序
		//使用比较器来进行排序
		//在比较器中 写你的排序规则
		//利用TreeSet的构造方法
		//直接将比较器的实现类传进去
		TreeSet<String> set=new TreeSet<>(new StringLengthImpl());
		set.add("
qwertyui");
		set.add("qwertyui");
		set.add("asd");
		set.add("fghjk");
		set.add("zxcvbnmasdfg");
		System.out.println(set);
	}

  例题:键盘接收一个字符串,程序对其中所有字符进行排序,要求保留重复的。

class CharLengthImpl implements Comparator<Character>{
	@Override
	public int compare(Character o1, Character o2) {
		int num=o1.compareTo(o2);
		//保留重复的
		return num==0?1:num;	
	}
}
private static void fun5() {
		//键盘接收一个字符串, 程序对其中所有字符进行排序 要求保留重复的
		System.out.println("请输入一个字符串");
		Scanner scanner=new Scanner(System.in);
		String string=scanner.nextLine();
		//字符串转字符数组
		char[] charArray = string.toCharArray();
		TreeSet<Character> set=new TreeSet<>(new CharLengthImpl());
		//把字符数组中的字符添加到set中
		for (int i = 0; i < charArray.length; i++) {
			set.add(charArray[i]);
		}
		System.out.println(set);
	}

  例题: 程序启动后,可以从键盘输入接收多个整数,直到输入quit时结束输入,把所有输入的整数倒序排列打印。

class NumberCompare implements Comparator<Integer>{

	@Override
	public int compare(Integer o1, Integer o2) {
		//倒序
		int num=o2-o1;
		return num==0?1:num;
	}
	
}
private static void fun6() {
		//  程序启动后, 可以从键盘输入接收多个整数,
		//  直到输入quit时结束输入. 
		//  把所有输入的整数倒序排列打印.
		System.out.println("输入整数 quit时结束");
		Scanner scanner =new Scanner(System.in);
		//创建排序的set
		TreeSet<Integer> set=new TreeSet<>(new NumberCompare());
		while (true) {
			//判断用户输入
			String string=scanner.nextLine();
			//判断是不是quit
			if (string.equals("quit")) {
				break;
			}
			//转化成数字
			int num=Integer.parseInt(string);
			//保存到set中 排序
			set.add(num);
		}
		System.out.println(set);
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值