본문 바로가기
JAVA

day11)[컬렉션 프레임워크]ArrayList

by code_learner 2022. 1. 10.

컬렉션 프레임워크(Collection Framework)

배열을 사용하다 보면 크기가 고정적이여서 그 크기를 넘어가게 되면 더이상 데이터를 저장 할 수 없다는 정적인 문제가 생긴다. 이러한 문제를 해결하기 위해 자바는 동적인 배열이 필요했고 데이터들을 효율적으로 관리할 수 있는 자료구조들을 만들었고, 이러한 자료 구조들이 있는 라이브러리를 컬렉션 프레임 워크라고 한다.

: 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합

 

List(리스트)

:데이터를 일렬로 늘어놓은 구조

List 인터페이스를 구현한 클래스: ArrayList, LinkedList

 

1)ArrayList

:요소 추가시 0번 인덱스부터 추가되며, 배열과는 달리 크기가 가변적으로 변한다.  

 

 

2)LinkedList

각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당한다. Node는 LinkedList에 객체를 추가하거나 삭제하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다.

 

 

ArrayList 주요메서드

package day11;

import java.util.ArrayList;

class A{

	@Override
	public String toString() {
		return "A 클래스";
	}
	
}

public class Test01 {

	public static void main(String[] args) {
		//리스트
		//배열 리스트
		ArrayList al = new ArrayList();
		al.add(10);
		A a = new A();
		al.add(a);
		al.add(new A());//무명객체
		al.add("apple");//인자로 Object를 받기 때문에 모든 형을사용 가능
		al.add(30);
		al.add(2, 30); //al.add(index, element);
		System.out.println(al);//toString 오버라이딩
		
		
		System.out.println(al.get(3));//index 위치에 있는 요소 반환
		
		al.remove(1);//index 값 삭제
		System.out.println(al);
		
		System.out.println(al.size());//.length와 비슷한 역할
		
		al.clear();//초기화
		System.out.println(al);
		
		if(al.isEmpty()) {
			System.out.println("비어있음");
		}else {
			System.out.println("안비어있음");
		}
		
		
				/*[10, A 클래스, 30, A 클래스, apple, 30]
				A 클래스
				[10, 30, A 클래스, apple, 30]
				5
				[]
				비어있음*/

		
	}

}

 

 Generic(제네릭)

: 클래스가 다룰 객체를 미리 명시하는 기법

->저장될 데이터들의 타입을 일반화

package day11;


import java.util.ArrayList;
class Point{
	   int x;
	   int y;
	   Point(int x,int y){
	      this.x=x;
	      this.y=y;
	   }
	   void move() {
	      x++;
	      y++;
	   }
	   @Override
	   public String toString() {
	      return "Point [x=" + x + ", y=" + y + "]";
	   }
	}


public class Test03 {
	public static void main(String[] args) {
		Point p = new Point(10,20);
		System.out.println(p);
		
		ArrayList<Point> al = new ArrayList<Point>();
		ArrayList<Integer> al2 = new ArrayList<Integer>();
		//컬렉션 al! 나는 Point 타입만 저장할 거야!
		//타입을 정의
		
		
		al.add(p);
		al.add(new Point(1,2));
		System.out.println(al);
		
		al.add(p);//제네릭이 가진 강제성
		al.add(new Point(0,0));
		
		al2.add(10);
		
		al.get(0).move();
		System.out.println(al);
	}
}

'JAVA' 카테고리의 다른 글

day13) 예외처리  (0) 2022.01.13
day12) 컬렉션 프레임워크2  (0) 2022.01.11
day09) 인터페이스  (0) 2022.01.02
day09) 추상 메서드, 추상 클래스  (0) 2021.12.31
day08)상속  (0) 2021.12.31

댓글