Java

ArrayList 란?

유호야 2020. 11. 30. 23:14
반응형

ArrayList란?

ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트입니다. 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점등이 유사하지만 한번 생성되면 크기가 변하지 않는 배열과는 달리 ArrayList는 객체들이 추가되어 저장 용량(capacity)을 초과한다면 자동으로 부족한 크기만큼 저장 용량(capacity)이 늘어난다는 특징을 가지고 있습니다.

 ArrayList 사용 법 

ArrayList 선언

ArrayList list = new ArrayList();//타입 미설정 Object로 선언된다.
ArrayList<Student> members = new ArrayList<Student>();//타입설정 Student객체만 사용가능
ArrayList<Integer> num = new ArrayList<Integer>();//타입설정 int타입만 사용가능
ArrayList<Integer> num2 = new ArrayList<>();//new에서 타입 파라미터 생략가능
ArrayList<Integer> num3 = new ArrayList<Integer>(10);//초기 용량(capacity)지정
ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(1,2,3));//생성시 값추가

Arrays.asList(1,2,3)

ArrayList선언시 ArrayList list = new ArrayList()로 선언 후 내부에 임의의 값을 넣고 사용할수도 있지만 이렇게 사용할경우 값을 뽑아내기 위해서는 캐스팅(Casting) 연산이 필요하고 잘못된 타입으로 캐스팅을 한 경우에는 에러가 발생하기에 위와 같은 방식은 추천하지 않습니다. ArrayList를 사용할시에는 ArrayList에 타입을 명시해주는것이 좋습니다. JDK 5.0이후부터 자료형의 안정성을 위해 제너릭스(Generics)라는 개념이 도입되었습니다. ArrayLIst<String> list = new ArrayList<String>(); 이라고 되어있다면 String객체들만 add되어질수있고 다른 타입의 객체는 사용이 불가능합니다.

ArrayList 값 추가

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(3); //값 추가
list.add(null); //null값도 add가능
list.add(1,10); //index 1에 10 삽입

 ???  ㄱ

ArrayList<Student> members = new ArrayList<Student>();
Student student = new Student(name,age);
members.add(student);
members.add(new Member("홍길동",15));

ArrayList에 값을 추가하려면 ArrayList의 add(index, value) 메소드를 사용하면 됩니다. index를 생략하면 ArrayList 맨 뒤에 데이터가 추가되며 index중간에 값을 추가하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 뒤로 밀려납니다. 

ArrayList 값 삭제

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
list.remove(1);  //index 1 제거
list.clear();  //모든 값 제거

ArrayList에 값을 제거하려면 ArrayList의 remove(index) 메소드를 사용하면 됩니다. remove()함수를 사용하여 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨집니다. 모든 값을 제거하려면 clear() 메소드를 사용하면 됩니다.

 

ArrayList 크기 구하기

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.size()); //list 크기 : 3

ArrayList의 크기를 구하려면 ArrayList의 size() 메소드를 사용하면 됩니다.

 

ArrayList 값 출력

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));

System.out.println(list.get(0));//0번째 index 출력
		
for(Integer i : list) { //for문을 통한 전체출력
    System.out.println(i);
}

Iterator iter = list.iterator(); //Iterator 선언 
while(iter.hasNext()){//다음값이 있는지 체크
    System.out.println(iter.next()); //값 출력
}

Iterator는 별도로....

ArrayList의 get(index) 메소드를 사용하면 ArrayList의 원하는 index의 값이 리턴됩니다. 전체출력은 대부분 for문을 통해서 출력을하고 Iterator를 사용해서 출력을 할수도 있습니다.

 

ArrayList 값 검색

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.contains(1)); //list에 1이 있는지 검색 : true
System.out.println(list.indexOf(1)); //해당값이 있는 index 번호를 출력

ArrayList에서 찾고자 하는 값을 검색하려면 ArrayList의 contains(value) 메소드를 사용하면 됩니다. 만약 값이 있다면 true가 리턴되고 값이 없다면 false가 리턴됩니다. 값을 있는 index를 찾으려면 indexOf(value) 메소드를 사용하면 되고 만약 값이 없다면 -1을 리턴합니다.

 

출처 : coding-factory.tistory.com/551


배열 -> 리스트

 

1. 반복

 

  - 단순 반복으로 배열의 요소를 리스트에 하나씩 넣는 것이 가장 쉬운 방법일 수 있다.

 

2. Arrays.asList()

 

  - Arrays.asList()를 사용하면 아래처럼 바로 list로 변환 할 수 있다.

int[] arr1 = {1,2,3,4};
//List<Integer> list1 = Arrays.asList(arr1);   // error
List<int[]> list1 = Arrays.asList(arr1);
       
Integer[] arr2 = {1,2,3,4};
List<Integer> list2 = Arrays.asList(arr2);

  - 단 int[] 꼴은 List<int[]> 으로, Integer[] 꼴은 List<Integer> 으로 변환되기 때문에, int[]을 List<Integer>로 변환하려면 우선 Integer[]으로 변환하고 이를 다시 Arrays.asList()하는 작업이 필요하다.

 

3. int[] -> Integer[] -> List<Integer>

int[] arr1 = {1,2,3};

Integer[] arr2 = Arrays.stream(arr1).boxed().toArray(Integer[]::new);

List<Integer> list3 = Arrays.asList(arr2);

  

Arrays.asList

 

  Arrays.asList()를 하면, toArray()와 달리 List<T>으로 동일한 타입의 객체가 리턴된다.

List<Integer> testList = Arrays.asList(testArray);

System.out.print("\n"+testList.size());

testList.add(3);    //(x)

System.out.print("\n"+testList.size());

  위 코드는 이상이 없어보이고, 출력은 n 개 / n+1 개를 생각했겠지만 이는 틀린 코드다.

 

  Arrays.asList()의 반환 값은 Collections.List<>가 아니다. 

 

  실재 반환 객체의 타입은 java.util.Arrays.ArrayList 이고, 이는 사이즈를 변경할 수 없다.

 

List<Integer> testList_1= new ArrayList<>(Arrays.asList(testArray));

  이럴 때에는 이렇게 생성자에 asList() 리턴 값을 넣어, Collections.List<> 를 사용하는 것이 바람직하다.

 

출처 : ecsimsw.tistory.com/

반응형

'Java' 카테고리의 다른 글

JSTL <c:forEach> 사용법  (0) 2020.12.01
DAO vs DTO(=VO) 개념 알아보기  (0) 2020.12.01
redirect forward 차이점  (0) 2020.11.30
HashMap이란?  (0) 2020.11.30
자바 + 서블릿/ 회원가입 페이지  (0) 2020.11.29