2012-12-15 3 views
0

모든 ID를 .txt 파일에서 읽은 다음이 ID를 Vector에 삽입합니다.Java에서 Vector의 여러 요소를 제거하는 방법은 무엇입니까?

  String pathSelectedfile = fileChooser.getSelectedFile().getAbsolutePath(); 
      File selectedFile = new File(pathSelectedfile); 
      Scanner readFile = new Scanner(selectedFile); 

      Vector ids=new Vector(); 
      while (readFile.hasNextLine()) { 
       String id= readFile.nextLine(); 
       ids.addElement(id); 
      } 

는 너무 많은

+0

텍스트 파일에서 데이터를 읽는 방법이 잘못 되었나요? 그냥 Vecto에서 여러 요소를 제거하는 방법을 배우고 싶습니다. r –

+1

readFile이 Scanner 인스턴스이면 올바른 것입니다 ... 벡터가 더 이상 사용되지 않습니다. – Thihara

+0

@SerxanResullu 이제는 이해가되지만, 일부 입력 데이터, 예상 결과를 제공하십시오. 그래서 당신은 적절한 도움을 얻을 것입니다. – Smit

답변

2

가 사용하는 대신 여러 값

Vector vector = new Vector(); 
    vector.add("value1"); 
    vector.add("value2"); 
    vector.add("value3"); 
    vector.add("value4"); 
    System.out.println("Size : "+vector.size()); 
    // to remove single value 
    vector.remove("value1"); 
    System.out.println("Size : "+vector.size()); 
    Vector itemsToRemove = new Vector(); 
    itemsToRemove.add("value3"); 
    itemsToRemove.add("value4"); 
    //remove multiple values 
    vector.removeAll(itemsToRemove); 
    System.out.println("Size : "+vector.size()); 

    //to remove all elements 
    vector.removeAllElements(); 
    // or 
    vector.clear(); 

을 제거하되 Vector은 Vector가 사용되지 않는 컬렉션이기 때문에 ArrayList을 사용하는 것이 좋습니다. 읽어보기 : Why is Java Vector class considered obsolete or deprecated?

또한 제네릭을 사용하십시오. ArrayList<String> idList = new ArrayList()처럼 문자열 요소 만 목록에 저장하십시오. 당신이 Vector의 요소를 추가 할 때 중복을 건너 뛰려면

, 다음 코드를 사용

Vector vector = new Vector() { 
     @Override 
     public synchronized boolean add(Object e) { 
      if(!contains(e)){ 
       return super.add(e); 
      } 
      System.out.println("Element " + e +" is duplicate"); 
      return false ; 
     } 
    }; 

그러나 당신은 당신이 "여러 제거하려면 Set

+0

과 요소가이 파일에 여러 개 있다는 것을 어떻게 찾을 수 있습니까? –

+0

무엇이 여러 개를 의미합니까? 너는 중복을 의미합니까? – vels4j

+0

예, 중복 된 의미입니다. –

2

완전히 다음을 사용할 수, 중복 ID를 제거 마십시오 : 벡터는 달리, LinkedHashSet의 동기화되지 않도록

 Set<String> ids=new LinkedHashSet<String>(); 
     Set<String> duplicates=new HashSet<String>(); 
     while (readFile.hasNextLine()) { 
      String id= readFile.nextLine(); 
      if(!ids.add(id)) { 
       duplicates.add(id); 
      } 
     } 
     ids.removeAll(duplicates) 

참고. 대부분의 경우 이것은 나쁜 것이 아니다, 그러나 당신이 실제로 동기화 할 필요가있는 경우에는 Collections.synchronizedSet()를 사용하여 포장

+0

이 방법으로 나는 dublicate elements.but 중 하나를 얻을 수 있습니다 dublicated 요소 중 하나를 얻고 싶지 않습니다 –

+0

먼저 요소가 dublicated 또는 모든 dublicated 요소를 제거하지 못하도록해야합니다. –

+0

좋아,이 질문에서 명확하지 않은, 내 대답을 편집했습니다. –

0

을 사용 만의 고유 요소를 추가하려면 벡터의 ID "를 다음과 같이하십시오

ids = new Vector(new HashSet(ids)) 
관련 문제