, 난 단지 한 번에 모든 것을 분석하고 당신이 원하는 무엇이든 함께 할 것입니다.
이 코드 조각이 단지는 Integers
의 분석 (I 의심은하지 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<Pair, String> 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
를 반환합니다.
편집
이런 코드 (더 HashMap<Integer, Object>
같이) SparseArray
2D를 사용한다. 이것으로 모든 것이 첫 번째 숫자로 정렬됩니다.
public class Reader {
private String firstNumber = "";
private String secondNumber = "";
private String countyName = "";
private StringTokenizer stringTokenizer = null;
private SparseArray<SparseArray<String>> sparseArray = new SparseArray<SparseArray<String>>();
private SparseArray<String> 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<String>());
}
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<String> startingWithZero = sparseArray.get(0);
하십시오 SparseArray
이 integers
에 대한 HashMap
, 그래서 모든 것이 오토 박싱되어야한다 (Integer
에서 int
까지, 기본 유형을 HashMap
에 입력 할 수 없으므로).
EDIT2 1D sparseArray의 주소를 인쇄합니다.
public void printEverythingStartingWithZero() {
SparseArray<String> 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);
}
}
당신은 앞의 0으로 먼저 1D sparseArray
를 검색 할 필요가있다.
정직하게 말하면, 라인마다 3200 라인의 3200 파일을 읽는 데 8 초가 걸립니다. –
단일 3200 파일입니다. 3200 번 반복됩니다. 당신이 가진 어떤 제안? 파일의 일부 데이터를 목록에 넣기 위해이 작업을 수행합니다. –
왜 같은 파일을 다시 읽는거야 ** 3200 번 **? – CommonsWare