HashSet与TreeSetDe关系----双色球

本文详细介绍了HashSet和TreeSet两种Java集合类的特点与区别,并通过实例演示了如何使用这两种集合来生成随机数和进行数据比对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、HashSet
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
此类为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和 size,假定哈希函数将这些元素正确地分布在桶中。对此集合进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层 HashMap 实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。
我们应该为要存放到散列表的各个对象定义hashCode()和equals();
 
public class HashTest {



public static void main(String[] args)

   {

       HashSet<Integer> hash = new HashSet<Integer>();

       Random random = new Random();

       while(hash.size()!= 6){

       int randomValue = random.nextInt(33) + 1;

       hash.add(randomValue);

       }

       String result = "结果是:";

       for(Integer i: hash){

       result += i + " "; 

       }

      System.out.println(result);

   }

}

运行结果:
结果是:19 6 25 29 12 14 
结果是:16 4 5 25 12 31 

2、TreeSet
此类实现 Set 接口,该接口由 TreeMap 实例支持。此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序,或按照在创建 set 时所提供的比较器进行排序。
是一个有序集合,元素中安升序排序,缺省是按照自然顺序进行排序,意味着TreeSet中元素要实现Comparable接口;
我们可以构造TreeSet对象时,传递实现了Comparator接口的比较器对象.
 
public class HashTest {

public static void main(String[] args)

   {

       TreeSet<Integer> tree = new TreeSet<Integer>();

       Random random = new Random();

       while(tree.size()!= 6){

       int randomValue = random.nextInt(33) + 1;

       tree.add(randomValue);

       }

       String result = "结果是:";

       for(Integer i: tree){

       result += i + " "; 

       }

      System.out.println(result);

   }

}

运行结果:
结果是:4 7 9 11 26 29 
结果是:3 9 14 24 27 32 
 
3、用serlvet实现
package shipin11;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DoubleColorBallServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		Set<Integer> set=new HashSet<Integer>();
		Random random=new Random();
		String result="red ball:";
		
		//给容器赋值
		while(set.size()!=6){
			int randomValue=random.nextInt(33)+1;
			set.add(randomValue);
		}
		 
		int randomValue=random.nextInt(16)+1;
		//将set中生成的  随机数   添加到result后面
		for(Integer i:set){
			result+=i+" ";
		}
		result+="<br>blue ball:"+randomValue;
		
		resp.setContentType("text/html");
		PrintWriter out=resp.getWriter();
		
		out.println("<html><head><title>RegisterServlet Result</title></head>");
		out.println("<body><h1>"+result+"</h1></body></html>");
		
		out.flush();
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
	
	}
}



运行结果:
red ball:16 32 33 20 5 7
blue ball:8
 
 
4、示例:
package com.sg;

import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class SSQ {

    public static void main(String[] args) {
        // 上期特等奖号码
        int[] red = { 7, 13, 15, 17, 19, 24 };
        int blue = 11;

        Set<Integer> set1 = new TreeSet<Integer>();
        
        Random random = new Random();
        // 得到上期特等奖的数组
        for (Integer a : red) {
            set1.add(a);
        }

        while(true) {
            Set<Integer> set = new TreeSet<Integer>();
        
            // 随机产生预测红球
            while (set.size() != 6) {
                int randomValue = random.nextInt(33) + 1;
                set.add(randomValue);
            }
            // 随机产生预测蓝球
            int randomValue = random.nextInt(16) + 1;
    
            StringBuffer result = new StringBuffer("红球:");
            for (Integer i : set) {
                result.append(i + " , ");
            }
            result.append(" 蓝球:" + randomValue);
            // 默认会调用StringBuffer的toString()方法
            System.out.println(result);
            
            // 判断新生成篮球和红球是否与上一期的篮球和红球相等
            //:由于set不重复,所遇两个set集合如果大小相同且其中一个包含另外一个的全部内容,可以认定两个集合内容相同
            if(randomValue == blue && (set.size() == set1.size() && set1.containsAll(set))) {
                System.out.println("成功匹配!");
                return;
            }
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值