Java/JAVA
List
Jenny_yoon
2023. 1. 5. 14:57
728x90
반응형
List 컬렉션
- List 컬렉션은 객체를 일렬로 늘어놓은 구조를 갖고있다.
- 객체를 인덱스로 관리하며 객체를 저장하면 자동으로 인덱스가 부여됨.
- List 컬렉션은 객체 자체르르 저장하는 것이x 객체의 번지를 참조하는 것!
- 동일한 객체 중복저장 가능 (동일한 번지가 참조되는 개념)
- null 도 저장 가능 (이 경우 해당 인덱스는 객체를 참조하지 않음)
List의 배열생성 법
List<Integer> list = new ArrayList<Integer>();
주로 이렇게 배열을 생성한다. 하지만 아래 방식으로도 배열을 생성할 수도 있다.
ArrayList<Integer> list = new ArrayList<Integer>();
List 와 ArrayList의 차이점이 뭘까?
List와 ArrayList는 부모자식 관계라고 할 수 있다. List 안에는 ArrayList, LinkedList 등이 있다.
- List로 생성한 1번째 방식은 ArrayList와 자식관계이므로 다형성을 통해 배열을 선언하였다.
이런 경우 ArrayList, LinkedList 등 List 안에 속한 모든 기능을 다형성을 통해 사용 가능하다. - ArrayList로 생성한 2번째 방식은 ArrayList밖에 사용하지 못한다.
쉽게 도형에 비유하여 풀어보면, List는 도형이고 ArrayList는 정사각형, LinkedList는 직사각형이라고 할 수 있다.
import java.util.ArrayList;
import java.util.List;
public class AL01 {
public static void main(String[] args) {
// 1. 배열 생성
ArrayList<Integer> list = new ArrayList<Integer>();
//배열크기 추후 변경 가능 //< > : 제네릭
//int[] arr = new int[10]; //이 형태는 배열크기 추후 변경 불가
//2. 값 추가
list.add(150);
list.add(110);
list.add(100);
list.add(99);
list.add(85);
list.add(75);
//3. 값 출력
System.out.println(list); //모든 배열값
//특정 인덱스 출력
System.out.println(list.get(0)); //150
//for문으로 출력
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i)); //모든 배열값
}
//foreach문으로 출력
for(Integer integer : list) {
System.out.println(integer); //모든 배열값
}
//list의 마지막 데이터 출력
System.out.println(list.get(list.size()-1)); //75
//배열 길이 출력
System.out.println(list.size()); //6
//4. 값 초기화
list.clear(); //초기화
System.out.println(list.size()); //0
응용문제 1.
1~20중 짝수만 배열에 넣어서 출력해라.
ArrayList<Integer>list2 = new ArrayList<Integer>();
for(int i=1; i<21; i++) {
if(i%2 == 0) {
list2.add(i);
}
}
System.out.println(list2);
응용문제 2.
1~20의 숫자를 배열에 넣고, 홀수 값을 제외한 값만 출력해라.
ArrayList<Integer>list3 = new ArrayList<Integer>();
for (int i = 1; i < 21; i++) {
list3.add(i);
}
for(int j=19; j>0; j--) {
if(j%2 == 0) {
list3.remove(j);
}
}
System.out.println(list3);
더보기
해설 :
인덱스를 앞부터 삭제를 하면, 뒷 인덱스가 앞 인덱스 자리에 땡겨오게 된다. 즉, 인덱스들이 각자의 자리를 지키고 있는것이 아니라 계속 앞으로 땡겨지게 되는것. 그래서 맨 뒤부터 홀수를 찾아 삭제해야 한다!
list3.add(0,100); //0번째에 값 100을 넣음.
System.out.println(list3.get(0)); //100
System.out.println(list3.size()); //14
System.out.println(list3);
//값이 있는지 확인(true/false)
list3.contains(20);
System.out.println(list3.contains(100));
//값이 비어있는지 확인(true/false)
list.isEmpty();
System.out.println(list.isEmpty());
//from~to~ 값을 옮기기
list3.subList(1, 2);
System.out.println(list3.subList(1, 2));
//배열값 섞기
Collections.shuffle(list3);
System.out.println(list3);
//오름차순 정렬
Collections.sort(list3);
System.out.println(list3);
//내림차순 정렬
Collections.sort(list3,Collections.reverseOrder());
System.out.println(list3);
//해당 값 위치(인덱스번호) 찾기 (값이 없는경우, -1 반환)
list3.indexOf(10);
System.out.println(list3.indexOf(10)); //10
set()
List<Integer> list = new ArrayList<Integer>();
list.add(150);
int count = list.indexOf(150);
System.out.println(count); //0
//변수.set(index, E); //index째 자리를 요소 E로 대체.
list.set(0,1);
System.out.println(list); // [1]
Integer value = list.get(0); //래퍼클래스
System.out.println(value);//1
Arrays.asList() : 고정된 객체들로 구성됨
- 더이상 객체 갯수, 객체 값 변동이 없을때 사용 (변경 불가! )
List<Integer> list10 = Arrays.asList(3,1,6,2);
System.out.println(list10); //[3, 1, 6, 2]
//System.out.println(list10.set(0,9)); //오류!
//System.out.println(list10.remove(0)); //오류!
<참조>
List list0 = new ArrayList();
//제네릭 없이 이렇게 배열 생성가능.
//객체가 저장할때 Object로 변환되어 다양한 타입 변수 대입이 가능. 하지만 값을 찾아올 때 형변환을 해줘야해서 제네릭으로 해주는게 좋다.
//불필요한 형변환을 하지않도록 하기위해 제네릭이 도입된 것!
list0.add(10);
list0.add(11.1);
list0.add("홍길동");
list0.add(new Scanner(System.in));
System.out.println(list0);
int num0 = (int) list0.get(0); //형변환을 해줘야해서 제네릭으로 생성하는게 편하다.
응용문제 3(심화).
리스트를 만들고, 중복이 없는 랜덤숫자(1~45) 6개를 오름차순으로 배열에 저장해라. 랜덤은 6번만 실행
아래 코드는 자꾸 중복숫자가 나오므로 추후 수정예정!
List<Integer> rlist = new ArrayList<Integer>();
while (rlist.size() < 6) {
int random = (int) (Math.random() * 45) + 1; // 랜덤숫자 생성
if (rlist.indexOf(random) == 0) { // 랜덤숫자가 0번째에 있다면
continue; // 아래문장 실행하지 않고 위로 올라감
}
if (rlist.size() == 0) { // 배열길이가 0인경우
rlist.add(random); // 첫숫자라 저장하기
} else if (rlist.indexOf(random) == -1) { // 배열에 랜덤숫자가 없는경우 (중복숫자 검열)
for (int i = 0; i < rlist.size(); i++) { // 배열길이만큼 반복
if (rlist.get(i).compareTo(random) == 1) { // i번째 값과 랜덤숫자 비교. 앞숫자가 크면 1반환.
rlist.add(i, random);
break;
} else if (rlist.get(i).compareTo(random) == -1) {
for (int j = i + 1; j < rlist.size() - 1; j++) {
if (rlist.get(j) > random) {
rlist.add(j, random);
break;
}
}
}
}
}
}
System.out.println(rlist);
728x90
반응형