用ArrayList存储HashSet中的随机数并排序、查找

/*
 * 欢迎访问http://lishirongandcto.blog.163.com
 * 本程序的目的在于用HashSet存储产生的1000个2000
 * 以内的随机数,并对其进行排序,显示,以及二分查找
 * 仍然存在的一个问题是不存在所查找的值时线程将一直运行

*一下是效果截图:

 

 

*一下是代码部分:↓
 */



package MyIO;

import java.util.ArrayList;
import java.util.HashSet;

public class ArrayListTest{

//此处如果不用static则后面不能调用al对象
 static ArrayList al=new ArrayList();
 public static void main(String args[]){
  newData();
  sort();
  show();
  int value=7;
  int index=Find(value);
  if(index==0){
   System.out.print("\n"+"这个数据在ArrayList中并不存在!");
  }else{
   System.out.print("\n"+"这个数据在ArrayList中的位置为:"+index);
  }
 }
 //生成1000个2000以内的不重复随机数
 public static void newData(){
  HashSet hs=new HashSet();
  while(hs.size()<1000){
   hs.add((int)(Math.random()*2000));
  }
  for(Integer v:hs){
   al.add(v);
  }
 }
 //冒泡对ArrayList中的数据元素进行冒泡排序
 public static void sort(){
  boolean b=true;
  while(b){
   b=false;
   for(int i=0;i<999;i++){
    if(al.get(i)>al.get(i+1)){
     Integer temp=al.get(i);
     al.set(i, al.get(i+1));
     al.set(i+1, temp);
     b=true;
    }
   }
  }
 }
 //打印ArrayList中的元素
 public static void show(){
  for(Integer v:al){
   //很奇怪,这里的\t换成空格就不能打印出位置信息,希望了解的童鞋给评论一下
   System.out.print(v+"\t");
  }
 }
 //采用二分查找查询数据元素
 public static int Find(int value){
  int index=-1;
  int maxIndex=999;
  int minIndex=0;
  boolean b=true;
  while(b){
   int i=minIndex+(maxIndex-minIndex)/2;
   if(al.get(i)==value){
    index=i;
    break;
   }
   if(al.get(i)>value){
    maxIndex=i+1;
   }
   if(al.get(i)    minIndex=i;
   }
   if(maxIndex-minIndex<=1){
    b=false;
   }
  }
  return index+1;
 }
}

你可能感兴趣的:(Java基础)