티스토리 뷰

JAVA

190715 List, Iterator

猫猫 2019. 7. 15. 10:38
반응형
package prj190715;

import java.util.*;

public class ArrayListTest {

	public static void main(String[] args) {
		ArrayList<Object> list = new ArrayList(); //<Object> 생략가능 
		list.add("1111");
		list.add("2222");
		list.add("3333");
		list.add("4444");
		list.add(3333);  //list.add(new Integer(2)); autoboxing 기본자료형을 객체자료형으로 형변환.
		System.out.println(list);
		
		list.add(0, "000");
		System.out.println(list);
		
		System.out.println("index"+list.indexOf("3333"));
		
		list.remove("3333");
		System.out.println(list);
		
		System.out.println(list.remove("3333"));
		System.out.println(list);
		
		System.out.println("index" + list.indexOf("3333"));
		
		for(int i = 0; i<list.size(); i++) {
			list.set(i,  i+"");
		}

		System.out.print("{");
		
		for(int i =0; i<list.size();i++) {
			System.out.print(list.get(i)+" , ");						
		}
		System.out.print("}\n");
		
		for(int i =0; i<list.size(); i++) {
			System.out.println("  size = "+list.size()+"  i = "+i+"  remove =  "+list.remove(i));			
		}
//		for(int i =list.size()-1; i>=0; i--) {
//			list.remove(i);			
//		} //삭제할때는 list.size()-1 부터인 뒤부터 삭제 할 것!
		System.out.println(list);		
	}

}

 

 

왜 1,3만 남는지 이상해 했는데, List 형식의 특징이었다. 

 

 

list 형식이 삭제 시 한 칸씩 앞으로 당겨서 복사, null값으로 전환하면서 

list 사이즈도 변화함으로 i<list.size()에서 size값이 계속 변화하는것. 

인덱스 넘버는 그대로인데, size와 데이터 값이 앞으로 당겨서 복사 되기 때문에 벌어지는 일. 

그래서 list는 뒤부터 삭제하는것이 낫다. 

중간에 끼워넣고 중간삭제 해버리면 연산도 느려짐

 

 

 

list 의 삭제는 무조건 이렇게 해야 한다. 

안그러면 앞의 예 처럼 데이터가 남아버린다

 

=================================================

list를 implements 한 리스트 종류

1. arraylist

2. linked list

3. stack

4. queue  라고 보면 됨

 

다만 stack 은 stack.add가 아니라 stack.push, stack.pop / 후입선출(Last Input First Output) LIFO

queue.offer queue.poll로 호출한다. / 선입선출(First Input First Output)FIFO

 

==================================================

Iterator ★★★★★중요

 

package prj190715;

import java.util.*;

public class ArrayListTest {

	public static void main(String[] args) {
		ArrayList<Object> list = new ArrayList();

		list.add("1111");
		list.add("2222");
		list.add("3333");
		list.add(3);
		list.add(2, 1);
		
		Iterator it = list.iterator(); //iterator type : it //일회용 반복자(반복가능)
		// list안에 iterator 메소드가 있고 그 이터레이터는 이터레이터 타입의 it 참조 변수로 정의
		
		while(it.hasNext()) { //it의 다음에 내용이 있는지? 
			System.out.println(it.next()); //그럴땐 출력
		}		
		
		//일회용이라 두번 해도 두번 출력안됨. 두번하고 싶으면 Iterator type 한번 더 정의해야 함
		while(it.hasNext()) { //it의 다음에 내용이 있는지? true/ false 반환
			System.out.println(it.next()); //그럴땐 출력
		}		
	}//main end

}//class end

 

반응형