fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class Ideone
  6. {
  7. public static void main (String[] args) throws java.lang.Exception
  8. {
  9. // n人分のデータを作り
  10. int n = 100000;
  11. Random rand = new Random();
  12. String[][] customer = new String[n][2];
  13. for (int i = 0; i < n; i++)
  14. customer[i][0] = String.valueOf((char) (rand.nextInt(26)+'a')) + i + "@ab.com";
  15. for (int i = 0; i < n; i++)
  16. customer[i][1] = i + "さん";
  17.  
  18. // メールアドレスでソートします
  19. Arrays.sort(customer, (c1, c2) -> c1[0].compareTo(c2[0]));
  20.  
  21. // キーをメールアドレス、値を名前としたハッシュマップも作ります
  22. Map<String, String> hashmap = new HashMap<>(n);
  23. for (String[] c : customer)
  24. hashmap.put(c[0], c[1]);
  25.  
  26. // 同じcustomer(101番目)の名前が取れる
  27. System.out.println(customer[101][0] + "の名前は" + customer[101][1]);
  28. // ハッシュマップからメールアドレスで取ることもできる
  29. System.out.println(customer[101][0] + "の名前は" + hashmap.get(customer[101][0]));
  30. System.out.println("確認終わり");
  31.  
  32. // では、m人分のメールアドレスを適当に選んで
  33. int m = 1024000;
  34. String[] keys = new String[m];
  35. for (int j = 0; j < m; j++)
  36. keys[j] = customer[rand.nextInt(n)][0];
  37.  
  38. // 1人ずつ
  39. String[] keyCustomer = new String[2];
  40. for (int j = 0; j < m; j++){
  41. String key = keys[j];
  42. // 検索してみましょう
  43.  
  44. // TODOだった場所
  45. String found = null;
  46. keyCustomer[0] = key;
  47. int index = Arrays.binarySearch(customer, keyCustomer, (c1, c2) -> c1[0].compareTo(c2[0]));
  48. found = customer[index][1];
  49.  
  50. if (j % 10000 == 0) {
  51. System.out.println(key + "の名前は" + Objects.toString(found, "不明"));
  52. }
  53. }
  54. }
  55. }
Success #stdin #stdout 1.69s 2184192KB
stdin
Standard input is empty
stdout
a12193@ab.comの名前は12193さん
a12193@ab.comの名前は12193さん
確認終わり
l38327@ab.comの名前は38327さん
j95195@ab.comの名前は95195さん
p46218@ab.comの名前は46218さん
p34425@ab.comの名前は34425さん
n11834@ab.comの名前は11834さん
n72149@ab.comの名前は72149さん
x44433@ab.comの名前は44433さん
k18149@ab.comの名前は18149さん
u22345@ab.comの名前は22345さん
x23500@ab.comの名前は23500さん
o92714@ab.comの名前は92714さん
v76935@ab.comの名前は76935さん
h32753@ab.comの名前は32753さん
s8663@ab.comの名前は8663さん
p20272@ab.comの名前は20272さん
v31594@ab.comの名前は31594さん
z38729@ab.comの名前は38729さん
s71400@ab.comの名前は71400さん
d92337@ab.comの名前は92337さん
n15302@ab.comの名前は15302さん
j83152@ab.comの名前は83152さん
y71097@ab.comの名前は71097さん
k20882@ab.comの名前は20882さん
p14648@ab.comの名前は14648さん
u20734@ab.comの名前は20734さん
n537@ab.comの名前は537さん
p5225@ab.comの名前は5225さん
y39608@ab.comの名前は39608さん
v57654@ab.comの名前は57654さん
u55353@ab.comの名前は55353さん
v3937@ab.comの名前は3937さん
d73334@ab.comの名前は73334さん
r61868@ab.comの名前は61868さん
s97412@ab.comの名前は97412さん
b11630@ab.comの名前は11630さん
s93072@ab.comの名前は93072さん
p80033@ab.comの名前は80033さん
u38118@ab.comの名前は38118さん
k32091@ab.comの名前は32091さん
k15483@ab.comの名前は15483さん
c72192@ab.comの名前は72192さん
q73059@ab.comの名前は73059さん
j5714@ab.comの名前は5714さん
i48482@ab.comの名前は48482さん
w6325@ab.comの名前は6325さん
w77564@ab.comの名前は77564さん
h42731@ab.comの名前は42731さん
u37347@ab.comの名前は37347さん
y24862@ab.comの名前は24862さん
p13619@ab.comの名前は13619さん
s70807@ab.comの名前は70807さん
y5453@ab.comの名前は5453さん
b52080@ab.comの名前は52080さん
z11399@ab.comの名前は11399さん
v14067@ab.comの名前は14067さん
y77175@ab.comの名前は77175さん
v32058@ab.comの名前は32058さん
f60107@ab.comの名前は60107さん
l69364@ab.comの名前は69364さん
w83197@ab.comの名前は83197さん
c82319@ab.comの名前は82319さん
y44497@ab.comの名前は44497さん
p55321@ab.comの名前は55321さん
g6377@ab.comの名前は6377さん
x88141@ab.comの名前は88141さん
m28208@ab.comの名前は28208さん
n55540@ab.comの名前は55540さん
v24945@ab.comの名前は24945さん
x68800@ab.comの名前は68800さん
h80682@ab.comの名前は80682さん
b75792@ab.comの名前は75792さん
f3125@ab.comの名前は3125さん
p10563@ab.comの名前は10563さん
i43833@ab.comの名前は43833さん
n72579@ab.comの名前は72579さん
h83726@ab.comの名前は83726さん
l27465@ab.comの名前は27465さん
i9063@ab.comの名前は9063さん
l58486@ab.comの名前は58486さん
l14860@ab.comの名前は14860さん
m13093@ab.comの名前は13093さん
n59889@ab.comの名前は59889さん
z37110@ab.comの名前は37110さん
r32553@ab.comの名前は32553さん
a83915@ab.comの名前は83915さん
r51827@ab.comの名前は51827さん
j60522@ab.comの名前は60522さん
a86689@ab.comの名前は86689さん
w28116@ab.comの名前は28116さん
m71712@ab.comの名前は71712さん
g71913@ab.comの名前は71913さん
s96313@ab.comの名前は96313さん
z49342@ab.comの名前は49342さん
y90259@ab.comの名前は90259さん
r61227@ab.comの名前は61227さん
u6479@ab.comの名前は6479さん
q98992@ab.comの名前は98992さん
v12976@ab.comの名前は12976さん
s23836@ab.comの名前は23836さん
k4873@ab.comの名前は4873さん
p64981@ab.comの名前は64981さん
u97596@ab.comの名前は97596さん
x57170@ab.comの名前は57170さん