자료구조 Arraylist

jinkyung·2021년 1월 14일
0

JAVA

목록 보기
23/29

자료구조

: 데이터를 어떻게 관리할 것이냐

제어권 : 구현로직은 똑같은데 메소드만 제한하면 되는 것.

package com.bit.day10;

public class Ex02 {

	public static void main(String[] args) {
		//자료구조의 분류
		//집합(순서o, 순서x)
		//	list 순서o - 중복허용 (동일한 값이 들어가도 순서가 다르므로 구분 가능)
		//				나한테 제어권o 
		//					   제어권x 
		//	 set 순서x - 중복불허
	}
}

-Array 리스트와 linked 리스트 모두 List 인터페이스를 상속받는다.

package com.bit.day10;

import java.util.ArrayList;
import java.util.List;

public class Ex03 {

	public static void main(String[] args) {
//기본타입은 모두 boxing되어 들어가는 것이고, 나올때 unboxing
//ArrayList 또는 LinkedList 모두 List 인터페이스를 상속받고 있으므로 다형성에 의하여 메소드 호출
//각각의 리스트는 더 많은 기능이 있겠지만, 다형성에 의해 리스트에 선언돼있는 것만 쓸 수 있다.
		
		List list=new ArrayList();
		list.add(1111);
		list.add("두번째");
		list.add(true);
		list.add('A');
		
		list.remove(2);				//인덱스 번호로 삭제
		
		
		list.add(1, 3.14);
		list.set(2, "세번째");
		
		
		
		for(int i=0; i<list.size(); i++)
			System.out.println(list.get(i));
//		System.out.println(list.get(0));
//		System.out.println(list.get(3));			//제어권은 나한테 있으니까 순서 마음대로 출력가능
//		System.out.println(list.get(2));
//		System.out.println(list.get(1));
//		System.out.println(list.get(4));	          index out bound exception
		System.out.println("------------------------");
		
		//다른타입 매개변수 - 다형성에 의해서 object를 인자로 받아도 호출가능. 
		
	
		list.add(1);				
		list.add("세번째");
		list.add('A');				//Character class타입으로 들어가는 것.(boxing)
		list.add(new Ex01());		//객체도 받는다 = 모두 다 오버라이딩한것이냐? 아니다. 원래 객체로 받는 것이다.
//add의 입장에서는 인자로 어떤 타입의 값이 올 지 알수없다. 
//그래서 모든 클래스의 조상인 Object클래스 타입으로 인자를 받는다.
		


//		list.remove(3.14);			//값을 넣어 삭제도 가능. 원래 객체타입이지만 Double로 boxing되어 들어가고 나올때 다시 객체타입
//		list.remove(1);				//idx 번호가 우선순위를 갖는다.
//		list.remove(65);			//오류 : outbounds - 인덱스번호로 인식 (A를 찾지못함.)
		
		
		ArrayList list2=new ArrayList();
		list2.add("세번째");

		
		
//		list.remove("세번째"); 		//처음에 있던 "세번째" 지워줌
//		list.removeAll(list2);		//한번에 다 지움
		
//		System.out.println(list.contains("세번째"));			//존재하면 true
		
		
//		while(list.contains("세번째")){			//다 지우는 방법2
//			list.remove("세번째");
//		}
		
		
		
		while(list.indexOf("세번째")!=-1){		//-->첫번째로 등장하는 인덱스 위치 찾아줌.
				list.remove("세번째");			//없을땐 -1 반환
		}
		
		
		Object[] obj=list.toArray();
		
		System.out.println("------------------------");
		for(int i=0; i<obj.length; i++)
		System.out.println(obj[i]);			//끄집어내면 모두 object 이므로 필요시 캐스팅하여 써야한다.
	}
}

-리스트의 복사
		LinkedList list2=new LinkedList();
		list2.add("첫번째");
		List list=new ArrayList(list2);		//원래는 linked리스트인데 array리스트로 만들 수 있다.

package com.bit.day10;

import java.util.ArrayList;

public class Ex04 {

	public static void main(String[] args) {
		ArrayList list=new ArrayList();
		list.add("item1");
		list.add("item2");
		
		ArrayList list2=new ArrayList(list);		//깊은복사
		
		list.add(12121); 					//추가가 안된다. 복사는 위 시점에서 진행됐으므로
		
		for(int i=0; i<list2.size(); i++){			
			System.out.println(list2.get(i));
		}
	}
}

subList()
package com.bit.day10;

import java.util.ArrayList;
import java.util.List;

public class Ex04 {

	public static void main(String[] args) {
		ArrayList list=new ArrayList();
		list.add("item1");
		list.add("item2");
		
		ArrayList list2=new ArrayList(list);	//복사
		
		list2.add("item3"); 					
		list2.add("item4");
		
		
		List list3=list2.subList(1, 3);			//리턴타입은 List타입.
		
		
		for(int i=0; i<list3.size(); i++){			
			System.out.println(list3.get(i));
		}
	}
}

Array리스트는 어느정도 공간을 가지도록 생성되고, 다 차면 늘린다.(stringbuffer처럼)

trimTosize를 이용하여 잘라낼 수 있다

또한 객체를 생성할 때, 생성자에게 initalCapacity의 공간을 만들라고 명령을 줄 수 있다.

package com.bit.day10;

import java.util.ArrayList;

public class Ex04 {

	public static void main(String[] args) {
		ArrayList list=new ArrayList();
		list.add("item1");
		list.add("item2");
		
		ArrayList list2=new ArrayList(10);	//공간 정해서 만들었다.
		
		list2.add("1234"); 					
		list2.trimToSize();				//공간을 자른다.
		list2.add("4321");
		
		
		for(int i=0; i<list2.size(); i++){			
			System.out.println(list2.get(i));
		}
	}
}

0개의 댓글

관련 채용 정보