二分查找算法
public int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
//取中间索引
int midIndex = (beginIndex+endIndex)/2;
//如果查找的数小于第一位数 或者 查找的数大于最后一位数 或者 起始索引大于结束索引 都说明所查找的数不存在
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
//如果查找的数小于中间索引对应的值说明找的数在左半边,递归调用该查找方法,结束索引为中间索引向左移动一位
if(data <dataset[midIndex]){
return binarySearch(dataset,data,beginIndex,midIndex-1);
}else if(data>dataset[midIndex]){
//如果查找的数大于于中间索引对应的值说明找的数在右半边,递归调用该查找方法,起始索引为中间索引向右移动一位
return binarySearch(dataset,data,midIndex+1,endIndex);
}else {
//如果所查找的数正好等于中间索引对应的值,那么就将该索引返回
return midIndex;
}
}
- 用比较器完成将对象按特定规则排序
//实现Comparable接口,写比较器
public class StudentEntity implements Comparable {
private String name;
private String gender;
private double weight;
//用构造方法实现私有变量初始化
public StudentEntity(String name,String gender,double weight){
this.name = name;
this.gender = gender;
this.weight = weight;
}
//实现接口中的抽象方法,完成比较器
public int compareTo(Object o){
StudentEntity s = (StudentEntity)o;
//这里按体重排序
return (int)(this.weight - s.weight);
}
//重写toString,输出时调用就不会输出地址了
public String toString(){
return "{ 姓名:" + name + "\t性别:" + gender + "\t\t体重:" + weight + "kg}";
}
}
public static void main(String[] args) {
List list = new ArrayList();
list.add(new StudentEntity("贝贝","女",96));
list.add(new StudentEntity("大花","男",100));
list.add(new StudentEntity("啊哈","女",94));
//写了比较器后可以直接调用sort()排序
Collections.sort(list);
//循环遍历输出
// for (int i = 0;i<list.size();i++){
// StudentEntity stu = (StudentEntity)list.get(i);
// System.out.println(stu.toString());
// }
// for ( Object obj:list) {
// StudentEntity stu = (StudentEntity) obj;
// System.out.println(stu.toString());
// }
//用迭代器输出
Iterator it = list.iterator();
while (it.hasNext()){
StudentEntity stu = (StudentEntity) it.next();
System.out.println(stu.toString());
}
}
- foreach 循环语句的语法格式如下:
for(类型 变量名:集合)
{
语句块;
}
每执行一次循环语句,循环变量就读取集合中的一个元素,其执行流程如图所示。
用hashMap计算每个字符出现的次数
/** * 该方法用于 用户输入
* @return 需要判断的字符
*/
public String scan(){
Scanner input = new Scanner(System.in); System.out.println("请输入字符串:");
//用nextLine()可以获取输入的所有内容
String str = input.nextLine();
return str;
}
/** * 该方法用于判断字符个数 */
public Object useMap(String str){
Map p = new HashMap();
for (int i = 0;i<str.length();i++){
char c = str.charAt(i);
//如果key集合里存在c的话,value+1
if (p.containsKey(c)){
int v = (int)p.get(c)+1;
p.put(c,v);
}else{
p.put(c,1);
}
}
return p;
}
/** * 该方法用于输出HashMap集合 */
public void print(Object o){
Map p = (Map)o;
for(Object key:p.keySet()){
System.out.println(key+" "+p.get(key));
}
}