2014-09-06 2 views
-1

두 목록을 원본과 동일한 색인에 머물러있는 두 개의 값을 모두 포함하여 새 목록에 병합하려고하면 새 목록 길이 리스트 A는 무작위 색인에 하나의 숫자를 포함하고, 일부는 null이며, 숫자는 1-3 사이에 있습니다. 목록 B에는 모든 색인에 123이 들어 있습니다. for 루프를 사용하고 목록 추가를 시도했지만 인덱스 추가가 해당 값을 추가 할 때 목록의 내용을 푸시하기 때문에 indexoutofbounds를주었습니다. 임 지금 해시 맵 사용하려고 :두 목록을 새 목록에 병합하고 길이가 길지 않은 동일한 색인에 색인

목록 :이 코드 메신저도 경계와 모자와 mergeballs 밖으로 인덱스를 받고으로

Int arraylength = 10; 

ArrayList<Integer> mergeballs = new ArrayList<>(arraylength); // merging list A 
// contenent: null,3,null,null,2,3,null,1,null,2 

ArrayList<Integer> hats = new ArrayList<>(arraylength); // merging list B 
//contenent: 123,123,123,123,123,123,123,123,123,123 


ArrayList<Integer> hatsMerged = new ArrayList<Integer>(arraylength); // A & B merged 
for (int o = 0; o < stickarray.length; o++) { 
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer (arraylength); 
    map.put(o, hats.get(o) + mergeballs.get(o)); 
    hatsMerged.add(o,map.get(o)); 
    System.out.print(hatsMerged.get(o)); 
} 

요약지고, 내가 원하는하지 않습니다. 내가 원하는 : 123,1233,123,123,1232,1233,123,1231,123,1232

어떻게하면됩니까? 그리고 hashmap 최고의 옵션은 무엇입니까?

+5

한 번 병합 된 두 목록은 같은 색인에 항목을 보관할 수 있습니까? 병합되면 병합 된 목록에는 두 목록의 항목이 모두 포함되므로 목록 B의 항목 1은 항목 1이있는 목록 A와 병합되면 해당 색인에 보관 될 수 있습니다. –

+0

모든 색인에서 동일한 값을 포함하는 목록의 요점은 무엇입니까? 게다가 에드윈 달 로조 (Edwin Dalorzo)에 동의합니다. 의심스럽지 않습니다. – Dici

답변

4

당신이 묻고있는 것처럼 보이는 한 가지 방법이 있습니다. null을 무시하고 intString으로 변환 한 다음 다른 을 String에 연결하고 의 저장을 위해 int으로 다시 변환합니다. 뭔가 같은

public static List<Integer> merge(List<Integer> a, List<Integer> b) { 
    List<Integer> al = new ArrayList<>(); 
    for (int i = 0; i < a.size(); i++) { 
     Integer val = a.get(i); 
     StringBuilder sb = new StringBuilder(); 
     if (val != null) { 
      sb.append(val); 
     } 
     Integer bv = b.get(i); 
     if (bv != null) { 
      sb.append(bv); 
     } 
     try { 
      al.add(Integer.parseInt(sb.toString())); 
     } catch (NumberFormatException nfe) { 
      nfe.printStackTrace(); 
     } 
    } 
    return al; 
} 

public static void main(String[] args) { 
    List<Integer> a = Arrays.asList(123, 123, 123, 123, 123, 123, 123, 123, 
      123, 123); 
    List<Integer> b = Arrays.asList(null, 3, null, null, 2, 3, null, 1, 
      null, 2); 
    List<Integer> merged = merge(a, b); 
    System.out.println(merged); 
} 

출력합니다 (요청)입니다 -

[123, 1233, 123, 123, 1232, 1233, 123, 1231, 123, 1232] 
0

당신은 해시 맵을 사용할 필요가 없습니다. null 값을 확인하고 0으로 대체하고 두리스트 사이의 값을 합쳐서 합칠 수 있습니다. mergeballs.get(0)을 Integer 지역 변수에 할당하고 조건식에 사용하여 2 개의 호출을 피할 수 있습니다.

Integer result; 
    ArrayList<Integer> hatsMerged = new ArrayList<Integer>(arraylength); // A & B merged 
    for (int o = 0; o < arraylength; o++) { 
     result = ((mergeballs.get(o) == null) ? 0 : mergeballs.get(o)) + ((hats.get(o) == null) ? 0 : hats.get(o)); 
     hatsMerged.add(result); 
     System.out.print(hatsMerged.get(o)); 
    } 
관련 문제