数据结构与算法-数组练习
给你一个包含全国人民的年龄的数据文本 约14亿
现在需要统计有多少人 不能使用现有的器,比如map
考察使用数组达成目的
package com.zhouyou;
import java.io.*;
import java.util.Random;
public class data {
public static void main(String[] args) throws Exception {
/**
* 数据结构入门-面试问题
* 给你一个包含全国人民的年龄的数据文本 约14亿
* 现在需要统计有多少人 不能使用现有的容易,比如map
* 考察使用数组达成目的
**/
/*final String fileName = "age.txt";
final Random random = new Random();
BufferedWriter objWriter = null;
objWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName)));
for (int i = 0; i < 1400000000; i++) {
int age = Math.abs(random.nextInt()) % 180;
objWriter.write(age + "\r\n");
}
objWriter.flush();
objWriter.close();
*/
/*-----------------------上半段为生成文本代码,下半段为获取人数代码---------------------------*/
String str = null;
String file = "age.txt";
long start = System.currentTimeMillis();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
int tot = 0;
int[] data = new int[200];
// 缓冲流 一行一行 的读写
while ((str = reader.readLine()) != null){
// str = 10 10岁的人
Integer age = Integer.valueOf(str);
//System.out.println("data" +age+ "开始的值" + data[age]);
// 每个年龄段的人数统计 利用数组下标获取年龄
data[age] ++;
//System.out.println("data" +age+ "后来的值" + data[age]);
// 总人数统计
tot++;
}
System.out.println("总数据大小: " + tot);
for (int i = 0; i < 200; i++) {
System.out.println(i + ":" + data[i]);
}
System.out.println("一共花费了:" + (System.currentTimeMillis()- start) +"ms");
}
}
这里考察了利用数组下标来进行年龄统计和人数统计
数组是连续的内存空间和相同的数据结构,它有一个重要的特性:随机访问,这个特性有利有弊。新增/删除 每次都会使数组空间位置移动。利于查找。