Java

컬렉션(Collection) - 3. LinkedList

에어팟맥스 2022. 6. 29. 22:36

LinkedList는 모든 값을 출력할 때 유용하다.

== LinkedList == 
   1. 출력시 저장된 순서대로 나온다.
   2. 중복된 데이터를 저장할 수 있다.
   3. 데이터를 읽어오는 속도는 LinkedList 가 ArrayList 보다 상대적으로 느리다.
   4. 순차적으로 데이터를 추가/삭제하는 경우에는 LinkedList 가  ArrayList 보다 상대적으로 느리다.
   5. 일반적인 데이터 추가/삭제는 데이터 중간 중간마다 발생하므로 이러한 경우에는 LinkedList 가 ArrayList 보다 상대적으로 빠르다.    
   6. 결과값은 ArrayList 를 사용하든지 LinkedList 를 사용하든지 동일한 결과값을 가진다.
   7. LinkedList 보다는 ArrayList 를 사용하도록 하자. 
   
   == LinkedList (저장소) ==   
   
       감자(자신의 메모리주소 1372)----(앞서존재하던객체의 메모리주소 1372)고구마(자신의 메모리주소 3236)----(앞서존재하던객체의 메모리주소 3236)옥수수(자신의 메모리주소 1034)----(앞서존재하던객체의 메모리주소 1034)마늘(자신의 메모리주소 2340)---(앞서존재하던객체의 메모리주소 2340)양파(자신의 메모리주소 5236)   
   
   == 엄정화 를 삭제할 경우
       감자(자신의 메모리주소 1372)----(앞서존재하던객체의 메모리주소 1372)옥수수(자신의 메모리주소 1034)----(앞서존재하던객체의 메모리주소 1034)마늘(자신의 메모리주소 2340)---(앞서존재하던객체의 메모리주소 2340)양파(자신의 메모리주소 5236)
       
   == 엄정화 를 특정 위치에 추가할 경우
       상추(자신의 메모리주소 7876)를 유재석 다음에 추가하고자 한다.
       감자(자신의 메모리주소 1372)----(앞서존재하던객체의 메모리주소 1372)상추(자신의 메모리주소 7876)----(앞서존재하던객체의 메모리주소 7876)옥수수(자신의 메모리주소 1034)----(앞서존재하던객체의 메모리주소 1034)마늘(자신의 메모리주소 2340)---(앞서존재하던객체의 메모리주소 2340)양파(자신의 메모리주소 5236)
        

 

   //======================================================================================== //   

1. Member 클래스의 객체만을 저장할 수 있는 LinkedList 객체 mbr 리스트를 생성한다.

	public static void main(String[] args) {
		
		LinkedList<Member> mbrList = new LinkedList<>();

 

2. Member 클래스의 객체 6개를 생성하여 mbrList 에 저장한다.

	mbrList.add(new Member("youjs","qwer1234$","유재석"));
	    mbrList.add(new Member("eom","qwer1234$","엄정화"));
	    mbrList.add(new Member("kanghd","qwer1234$","강호동"));
	    mbrList.add(new Member("leess","qwer1234$","이순신"));
	    mbrList.add(new Member("kimth","qwer1234$","김태희"));
	    mbrList.add(new Member("leess","qwer1234$","이순신"));
	    mbrList.add(new Member("kangkc","qwer1234$","강감찬"));
	    mbrList.add(new Member("leehr","qwer1234$","이혜리"));

 

3. mbrList 에 저장되어진 모든회원들의 정보를 출력하도록 Member 클래스에 정의된 info_print() 메소드를 실행한다.

		// mbrList 에 저장되어진 데이터의 개수는 mbrList.size() 로 알아온다.
	    System.out.println(mbrList.size()); // 8
	    
	    for(int i=0; i<mbrList.size(); i++) {
	    	
	    	mbrList.get(i).info_print();
	    	
	    } // end of for -------------------------------------------------
	    
	    System.out.println("\n~~~~~~~~~~~~~~ 또는 ~~~~~~~~~~~~~~\n");
	    
	    // mbr 은 지역변수, mbrList.size() 만큼 반복
	    for( Member mbr : mbrList) {
	    	mbr.info_print();
	    } // end of for --------------------------------------------------

 

=== LinkedList 타입인 mbrList 에 새로운 Member 객체 추가시 특정 index(위치)에 저장되도록 할 수 있다. ===

		System.out.println("\n~~~ mbrList 에 새로운 Member 객체 추가하기 ~~~\n");
	    
	    mbrList.add(new Member("seolh","qwer1234$","설현"));
	    // index 값이 없으면 mbrList 의 맨 뒤에 추가된다.
	    
	    mbrList.add(3, new Member("chaew","qwer1234$","차은우"));
	    //          3 이 특정 인덱스이다.
	    // 유재석(0) 엄정화(1)  강호동(2)  이순신(3) 에서
	    // 유재석(0) 엄정화(1)  강호동(2)  차은우(3)  이순신(4) 으로 된다.
	    
	    for( Member mbr : mbrList) {
	    		mbr.info_print();
	    } // end of for

 

 === LinkedList 타입인 mbrList 에 저장되어진 Member 객체 삭제하기 === 

 

 		System.out.println("\n~~~ LinkedList 타입인 mbrList 에 저장되어진 Member 객체 삭제하기 ~~~\n");
	    
	    System.out.println( ">> 삭제하기 전 mbrList.size() => " + mbrList.size() );
	    // >> 삭제하기 전 mbrList.size() => 9
	    
	    mbrList.remove(3);   // mbrList.remove(삭제할 Member 객체의 인덱스번호);
	    
	    System.out.println( ">> 삭제 후 mbrList.size() => " + mbrList.size() );
	    // >> 삭제 후 mbrList.size() => 8
	    
	    for( Member mbr : mbrList) {
    		mbr.info_print();
	    } // end of for

 

=== mbrList 에 저장된 모든 객체 삭제하기 ===

System.out.println("\n=== mbrList 에 저장된 모든 객체 삭제하기 ===\n");
	    mbrList.clear();
	    
	    System.out.println( ">> 삭제 후 mbrList.size() => " + mbrList.size() );
	    // 삭제 후 mbrList.size() => 0
	    
	    
	    
	    
	} // end of main() ---------------------------------------------------------

 

 

 

 //======================================================================================== //

[퀴즈 1]

mbrList 에 저장되어진 Member 객체들 중에서 id 값이 "leess" 인 회원만 그 회원의 정보를 출력하세요

 		for( Member mbr : mbrList) {
	    	if("leess".equals(mbr.id)) {
	    		mbr.info_print();
	    	}
	    } // end of for
	    
	    // or 
	    
	    for(int i=0; i<mbrList.size(); i++) {
	    	if("leess".equals(mbrList.get(i).id)) {
	    		mbrList.get(i).info_print();
	    	}
	    } // end of for

 

 

[퀴즈 2]
      mbrList 에 저장되어진 Member 객체들 중에서 name 이 "이" 씨인 회원만 회원정보를 출력하기
      mbrList 에 저장되어진 Member 객체들 중에서 name 이 "서" 씨인 회원만 회원정보를 출력하기
      >> 회원중 "서" 씨는 없습니다. <<

 

 		for(int i=0; i<mbrList.size(); i++) {
	    	
	    	if( mbrList.get(i).name.startsWith("이") ) {
	    		mbrList.get(i).info_print();
	    	}
	    }
	    
	    for( Member mbr : mbrList) {
	    	if(mbr.name.startsWith("이")) {
	    		mbr.info_print();
	    	}
	    } // end of for
	    
	    String first_name = "이";
	    
	    boolean b = false;
	    for( Member mbr : mbrList) {
	    	
	    	if(mbr.name.startsWith(first_name)) {
	    		mbr.info_print();
	    		b = true;
	    	}
	    	
	    } // end of for
	    if(!b) {
	    	System.out.println(">> 회원중 \"" + first_name + "\" 씨는 없습니다. <<");
	    }

 

[퀴즈 3]
     mbrList 에 저장되어진 Member 객체들 중에서  name 이 "이" 씨인 회원들을 삭제하고,
     삭제한 후 mbrList 에 저장되어진 Member 객체들의 정보를 출력하세요
     
   

System.out.println("\n~~~~~~~~~~~~~~ [퀴즈 3] ~~~~~~~~~~~~~~\n");
	    
	    mbrList.add(new Member("leemh","qwer1234$","이민호"));
	    mbrList.add(new Member("leesk","qwer1234$","이승기"));
        
         
	    // 내 풀이
	    int count = 0;
	    for(int i=0; i<mbrList.size(); i++) {
	    	
	    	if(  mbrList.get(i-count).name != null
	    			&& mbrList.get(i-count).name.startsWith("이") ) {
	    		
	    		mbrList.remove(i-count);
	    		count++;
	    	}
	    	else {
	    		mbrList.get(i-count).info_print();
	    	}
	    }
	    
	    
	    // 선생님 풀이
	/*    for(int i=mbrList.size()-1; i>=0; i--) {
	    	if( mbrList.get(i).name != null && mbrList.get(i).name.startsWith("이")) {
	    		mbrList.remove(i);
	    		
	    	}
	    }
	    for( Member mbr : mbrList) {
    		mbr.info_print();
	    } // end of for
	    */

 

 

[퀴즈 4]
     mbrList 에 저장되어진 Member 객체들 중에서 특정한 조건(name 이 "강호동")에 만족하는 Member 객체를 삭제하고
     삭제되어진 그 인덱스(위치)에 새로운 Member 객체를 넣어주기
     
     그런데 만약 특정한 조건(name 이 "강호동")에 만족하는 Member 객체가 없는 경우
     새로운 Member 객체는 맨 뒤에 넣어주기

 

 	b = false;
	    for(int i=mbrList.size()-1; i>=0; i--) {
	    	if( "강호동".equals(mbrList.get(i).name) ) {
	    		mbrList.remove(i);
	    		mbrList.add(i, new Member("seokj", "qWer1234$","서강준"));
	    		b = true;
	    		break;
	    		
	    	}
	    }
	    if(!b) {
	    	mbrList.add(new Member("seokj", "qWer1234$","서강준"));
	    }
	    
	    for( Member mbr : mbrList) {
    		mbr.info_print();
	    } // end of for

 

'Java' 카테고리의 다른 글

컬렉션(Collection) - 5. HashSet, LinkedHashSet  (0) 2022.06.29
컬렉션(Collection) - 4. HashMap  (0) 2022.06.29
컬렉션(Collection) - 2. ArrayList  (0) 2022.06.28
콜렉션(Collection) - 1  (0) 2022.06.28
람다(Lambda)  (0) 2022.06.28