android for循环比大小,如何让for()循环花费更少的时间(android)?

如果我是你,我会分析一切只是一个时间,然后用它做任何你想要的。

这段代码就是这样做的,包括Integers的解析(我怀疑你需要这些作为值,而不是Strings):

public void read() throws IOException {

InputStream is = getAssets().open("USCOUNTIES.txt");

InputStreamReader iz=new InputStreamReader(is);

BufferedReader bis = new BufferedReader(iz);

String line = "";

String firstNumber = "";

String secondNumber = "";

String countyName = "";

StringTokenizer st = null;

HashMap map = new HashMap<>();

while((line = bis.readLine()) != null) {

st = new StringTokenizer(line, ",");

firstNumber = (String) st.nextElement();

st = new StringTokenizer((String)st.nextElement(), ">");

secondNumber = (String) st.nextElement();

countyName = ((String) st.nextElement());

countyName = countyName.substring(0, countyName.length()-1);

int num1 = Integer.parseInt(firstNumber);

int num2 = Integer.parseInt(secondNumber);

map.put(new Pair(num1, num2), countyName);

}

}

class Pair {

int num1, num2;

Pair(int num1, int num2) {

this.num1 = num1;

this.num2 = num2;

}

public boolean equals(Object other) {

if (other instanceof Pair) {

Pair np = (Pair) other;

return this.num1 == np.num1 && this.num2 == np.num2;

}

return false;

}

public int hashCode() {

return (Integer.valueOf(num1).hashCode() >> 13)^Integer.valueOf(num2).hashCode();

};

}

现在,你可以简单地检索每个countyName这一行:

String s = map.get(new Pair(1,69));

并返回Aleutians East

我希望得到你开始。

EDIT

这段代码使用2D SparseArray(很像HashMap)。有了这个,所有东西都按第一个数字排序。

public class Reader {

private String firstNumber = "";

private String secondNumber = "";

private String countyName = "";

private StringTokenizer stringTokenizer = null;

private SparseArray> sparseArray = new SparseArray>();

private SparseArray temporarySparseArray = null;

public void readFromIS() throws IOException {

InputStream is = getAssets().open("USCOUNTIES.txt");

InputStreamReader iz=new InputStreamReader(is);

BufferedReader bis = new BufferedReader(iz);

String line = null;

while((line = bis.readLine()) != null) {

readLine(line);

}

}

public void readFromList() {

String[] strings = {

"0,1>Autauga;",

"0,2>Baldwin;",

"0,3>Barbour;",

"1,69>Aleutians East;",

"1,68>Aleutians West;"

};

for (String line : strings) {

readLine(line);

}

}

private void readLine(String line) {

stringTokenizer = new StringTokenizer(line, ",");

firstNumber = (String) stringTokenizer.nextElement();

stringTokenizer = new StringTokenizer((String)stringTokenizer.nextElement(), ">");

secondNumber = (String) stringTokenizer.nextElement();

countyName = ((String) stringTokenizer.nextElement());

countyName = countyName.substring(0, countyName.length()-1);

int num1 = Integer.parseInt(firstNumber);

int num2 = Integer.parseInt(secondNumber);

if (sparseArray.get(num1) == null) {

sparseArray.put(num1, new SparseArray());

}

temporarySparseArray = sparseArray.get(num1);

temporarySparseArray.put(num2, countyName);

sparseArray.put(num1, temporarySparseArray);

temporarySparseArray = null;

}

public void test() {

readFromList();

String s = sparseArray.get(0).get(2);

SparseArray sa = sparseArray.get(0);

System.out.println(sa.size()); //should be 3

System.out.println(s); // should be Baldwin

}

}

并检索与num1开始所有的县,说,0,你只需要使用:

SparseArray startingWithZero = sparseArray.get(0);

FYI:一个SparseArray是integers一个HashMap,所以不是一切都要autoboxed(从Integer到int,因为您不能将原始类型放入HashMap)。

EDIT2您打印1D sparseArray的地址。

public void printEverythingStartingWithZero() {

SparseArray subSparseArray = sparseArray.get(0); //You first need a 1D sparseArray

int key = 0;

for(int i = 0; i < subSparseArray.size(); i++) {

key = subSparseArray.keyAt(i);

String county = subSparseArray.get(key); //county is the String in place (0,key)

System.out.println(county);

}

}

您需要首先检索1D sparseArray,并且前导零。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值