import java.util.List; public class Dichotomy { /** * 二分查找 */ static int COMPARE_SUCCESS = 0; public static boolean search(List<Student> list, Student sis) { boolean ret = false; int iindex = 0; // 相当于指针的东西 int istart = 0; // int iend = list.size() - 1; for (int i = 0; i < list.size(); i++) { if (list.size() <= 2) { iindex = i; } else { iindex = (istart + iend) / 2; if (iindex == istart && istart == (iend - 1) && iindex != 0) { iindex++; } } Student sr = list.get(iindex); //使用对象中的key进行查询 int compare = sis.compareTo(sr); if (compare > COMPARE_SUCCESS) { istart = iindex; } else if (compare < COMPARE_SUCCESS) { iend = iindex; } else { sis.setSex(sr.getSex()); sis.setMobile(sr.getMobile()); ret = true; break; } if (istart == iend) { break; } } return ret; } } package com.dichotomy; import java.util.ArrayList; import java.util.Collections; public class Test { public static void main(String[] args) { ArrayList<Student> al = new ArrayList<Student>(); int ss = pickRandom(1, 100); Student search = new Student(); //初始化数据 for (int i = 100; i >= 1; i--) { Student s = new Student(); s.setId(i); s.setIdCard(String.valueOf(pickRandom(100000000, 200000000))); s.setMobile(String.valueOf(pickRandom(200000000, 300000000))); s.setName(String.valueOf(pickRandom(300000000, 400000000))); s.setSex(pickRandom(0, 1) + ""); al.add(s); if(i == ss){ search.setId(s.getId()); search.setName(s.getName()); search.setIdCard(s.getIdCard()); } } for (int i = 0; i < 100; i++) { System.out.println( al.get(i) ); } System.out.println("------"); //数据排序 Collections.sort(al); for (int i = 0; i < 100; i++) { System.out.println( al.get(i) ); } System.out.println("------"); //数据查询 Dichotomy.search(al, search); System.out.println(search); } public static int pickRandom(int min, int max) { return (int) (Math.random() * (max - min + 1) + min); } }