본문 바로가기
Java/기초 Java

[기초 자바] List 인터페이스, ArrayList

by 호두빵 2021. 5. 21.

1. list에 값 추가하기

ArrayList<Integer> list = new ArrayList<Integer>();
		
		//추가
		list.add(111);
		
		Integer in  = new Integer(222);
		list.add(in);
		
		list.add(new Integer(333)); //총 3가지 방법을 써먹을 수 있다.

ArrayList는 객체 배열을 구현한 클래스이며, 객체 순서를 기반으로 자료를 순서대로 관리하는 프로그램을 만들 때 씁니다. 예를 들어, 정수형 자료가 들어가는 ArrayList인 list를 생성한다고 할 때, 제너릭을 활용하여 ArrayList<Integer>list = new ArrayList<Integer>(); 이렇게 선언을 해줍니다. 

 

list안에 값을 집어넣을 때는 총 세 가지 방법을 쓸 수 있는데, 공통적으로는 list.add(value);가 들어갑니다. 

 

첫 번째 방법은 가장 간단하기도 하고 쉬워서 자주 사용하는 것으로 직관적으로 list.add(value); , value값에 넣고자 하는 값을 넣는 것입니다. 두 번째는 첫 번째의 과정을 좀 더 풀어 쓴 것으로, wrapper class를 먼저 생성하고 나서 그 값을 value에 넣는 것입니다. 마지막으로는 첫 번째와 두 번째를 합친 격으로 보면 되겠습니다. 

 

2. list의 사이즈 구하기

	int len = list.size();
		System.out.println("list의 크기 : " + len);
        
        for(int i = 0; i<list.size();i++) {
			System.out.println(list.get(i)); // ==array[i]
		}

배열에서 .length를 통해서 길이를 구했던 것처럼 list에서는 list.size();를 통해서 구하게 됩니다. int len 값은 3을 출력해주며, for문을 돌려서 각각의 값을 꺼내올 수 있습니다.  list.get(0)은 111, list.get(1)은 222, list.get(2)는 333이 되겠죠.

 

3. list 중간에 값 끼워넣기

		//1번
		list.add(1,200);
		//2번
		Integer num = new Integer(200);
		list.add(1, num);
		//3번
		list.add(1, new Integer(200));
		
		
		for(int n : list) {
			System.out.println(n);
		}

list.add();의 방법이 세 가지가 있었던 것을 떠올려보면, 중간에 원하는 위치에 새로운 값을 추가하는 것도 세 가지 방법으로 할 수 있겠습니다. 다만, 맨 끝에는 값을 집어넣을 수 없으며 데이터 사이에만 새로운 값을 추가할 수가 있습니다. 

 

4.list에서 값 삭제하기

		//1번
		list.remove(2);
		//2번
		Integer r = new Integer(200);
		list.remove(r);
		//3번
		list.remove(new Integer(200));
		
		for(int n : list) {
			System.out.println(n);
		}

111 200 200 200 222 333 이렇게 되어 있는 값에 위와 같은 코드를 실행하면 값이 어떻게 바뀔까요? 답부터 말하자면 111 222 333이 됩니다. 1번에서 맨 처음으로 list.remove(2); 값을 받아 0,1,2 번째에 있는 200을 삭제합니다. 그러면 111 200 200 222 333이 됩니다. 그 다음 2번에서는 200의 값을 가진 1번째를 삭제하고, 111 200 222 333이 됩니다. 마지막으로 3번에서는 마찬가지로 역시 200의 값을 가진 1번째를 삭제합니다. 

 

5. list에서 값의 위치 찾기

		//검색
        //1번
		int index = list.indexOf(333);
		System.out.println(index);
		
        //2번
		index = -1;
		for(int i = 0; i<list.size();i++) {
			Integer val = list.get(i);
			if(val == 333) {
				index = i;
				break;
			}
		}
		System.out.println(index);

333의 위치를 알고 싶을 때에는 String클래스에서 다뤘던 .indexof를 사용합니다. list.indexOf(333)을 int형 index로 바당서 출력을 하면 바로 2가 나옵니다. ( 111 200 333 이기 때문)  두번째 방법처럼 해도 똑같이 나오는데요,  주의해야 할 부분은 index를 -1로 해야, 해당 ArrayList값에 존재하지 않는 것이 되므로 꼭 0으로 하지 않고 -1로 정하고 코드를 짜야합니다. 마찬가지로 여기서도 index는 2가 나옵니다. 

 

6. list에서 값 수정하기

		//수정
		list.set(0, 1);
		
		Integer ud = new Integer(2);
		list.set(1, ud);
		
		list.set(2, 3);
		
		for(int n : list) {
			System.out.println(n);
		}

list.set(int index, Integer element)로 수정이 가능합니다. 111 222 333인 것을 위의 코드를 실행시키면 1,2,3이 됩니다. int index 자리에는 수정하고자 하는 값의 위치를 적고, Integer element는 수정 후 값을 적으면 됩니다. 

 

public class MyClass {
	
	private int number;
	private String name;
	
	public MyClass(){
		
	}
	public MyClass(int number, String name) {
		this.number = number;
		this.name = name;
		// TODO Auto-generated constructor stub
	}

단순히 같은 창에서 입력받는 것을 해봤으니 이번에는 클래스를 따로 만들어서 List 인터페이스를 익히도록 하겠습니다. MyClass라는 이름의 클래스를 하나 만들어주고, int형 number와 String형 name을 매개변수로 받는 MyClass 함수를 만들어줬습니다. 여기에 set/get 함수를 사용하여 private인 멤버변수에 접근할 수 있도록 해줬습니다. 

	ArrayList<MyClass>mylist = new ArrayList<MyClass>();
		
		//추가
		mylist.add(new MyClass(1001,"서울시"));
		
		MyClass mc = new MyClass(1002,"종로구");
		mylist.add(mc);
		
		mc = new MyClass(1003,"익선동");
		mylist.add(1,mc);
		
		for(int i = 0; i<mylist.size();i++) {
			MyClass m = mylist.get(i);
			System.out.println(m.toString());
		}
        
		//삭제
		mylist.remove(1);
        
		//검색
		String name = "성춘향";
		index = -1;
		for(int i = 0; i<mylist.size();i++) {
			MyClass m = mylist.get(i);
			if(name.equals(m.getName())){
				index = i;
				break;
			}
		}
		System.out.println("검색데이터 : " + mylist.get(index).toString());
        
		//수정
		MyClass ucls = new MyClass(1000,"누하동");
		mylist.set(0, ucls);
		
		for(int i = 0; i<mylist.size();i++) {
			MyClass m = mylist.get(i);
			System.out.println(m.toString());
		}

다른 클래스를 만들어서 하는 경우에도 크게 다르지는 않습니다. ArrayList<MyClass>mylist = new ArrayList<MyClass>(); 이 부분에서 자료형을 받는 <T> 부분에 MyClass가 MyClass의 인스턴스임을 이해하는 것이 중요합니다. (int Number, String name)을 매개변수로 받는 MyClass 하나하나가 list의 하나하나가 되는 것입니다. 

'Java > 기초 Java' 카테고리의 다른 글

[기초 자바] Generic이 대체 뭔가요?  (1) 2021.05.20
[기초 자바] 상속의 기초 개념(1)  (0) 2021.05.18
[기초 자바] 피보나치 수열  (0) 2021.05.13
[기초 자바] String class  (1) 2021.05.11
[기초 자바]wrapper class  (0) 2021.05.11