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