List
Collection은 배열이나 집합을 쉽게 다루기위한 도구들의 집합이다. 그 중 처음으로 배운 것은 'List' !
배열처럼 사용이 가능하고, 길이값 설정이 유동적으로 바뀌어서 편하게 사용이 가능하다.
'List'에 객체를 집어넣을 때에 객체의 형태로 넣어야해서 기본형 타입의 자료를 박싱하여 넣어야하는 것이 원칙이다.
하지만 파라미터에 리터럴값으로 넣어줘도 autoboxing이 일어나기에 기본형으로 넣어도 된다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Collection 배열을 쉽게 다루기위한 도구
// List == 인터페이스, ArrayList == Class
// ArrayList 배열처럼 사용이 가능함 / 길이값 설정할 필요 X 길이가 유동적으로 바뀜
List list = new ArrayList();
// add 메소드는 객체의 형태로 집어넣어야하기에, 기본형을 박싱하여 넣어야한다.
list.add("asdf");
list.add(Integer.valueOf(100));
// auto박싱이 일어나기에 기본형을 넣으면 자동으로 박싱된다.
list.add(500);
list.add(Double.valueOf(45.12));
// 리스트야 원소 몇 개니
System.out.println("현재원소개수 :" + list.size());
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.get(3));
}
}
List의 원소는 인덱스값으로 접근하여 set으로 초기화가 가능하다. 기존 값은 없어지니 주의
삭제되면 삭제된 인덱스의 오른쪽의 값들이 한 칸씩 당겨져오게 된다.
*List의 길이값에 대하여
List는 capacity 형태로 길이 값을 갖고 있다.
capacity를 설정해 줄 수 있고, capacity가 넘어가면 설정값의 배수로 길이값이 늘어남
*index를 설정할 수 있는 add
list.add(0, 100);
이렇게 인덱스에 접근하여 add를 할 수 있다. 저 말은 즉 인덱스0에 100을 추가하겠다는 말
기존 인덱스의 값은 오른쪽으로 밀려나게 된다.
*indexOf, lastIndexOf
indexOf로 입력된 값이 몇번째의 인덱스에 존재하는지 알려준다. 정순으로 !
lastIndexOf는 반대로 역순으로 인덱스 값을 알려준다.
*toArray
리스트의 원소들을 배열로 변경할 수 있다. 원소값은 그대로 두면서!
list.toArray(new String[0]);를 활용하여 리스트를 배열로 바꿀 수 있다. 주의할 점은 파라미터에 어떤 자료형의 배열로 바꿀 것인지만 알려주면된다.
*subList
시작값과 끝값을 입력하면 그 사이 값들만 남기고 모든 원소들이 제거된다.
*제네릭에 객체형태를 명시하고 List에 담아보자
제네릭에 Person을 명시하고 담을 수 있다.
add를 통해 객체를 담을 수 있고, get을 통해 객체를 꺼낸 뒤, 객체의 필드에도 접근이 가능하다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Person p1 = new Person("둘리", 22, 180, 80);
Person p2 = new Person("도우너", 25, 170, 90);
Person p3 = new Person("길동", 32, 190, 85);
Person p4 = new Person("희동", 5, 100, 30);
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
// System.out.println(list.get(2));
list.add(0, new Person("마이콜", 23, 185, 70));
list.remove(list.size() - 1);
// 3번째 있는 사람 키
Person getP= list.get(3);
System.out.println("3번째 인덱스 사람의 키 : " + getP.getHeight());
System.out.println(list.get(3).getHeight());
// 3번째 있는 사람 키 변경
getP.setHeight(175);
System.out.println("3번째 인덱스 사람의 키 : " + getP.getHeight());
// for (Person p : list) {
// System.out.println(p);
// }
}
}
*contains로 원하는 객체와 같은 객체가 있는지 확인하는 법
해당 객체의 클래스에서 꼭 equals를 재정의 해줘야 contains가 의도대로 동작하게 된다.
// 도우너라는 사람이랑 같은 사람 찾는 방법
// Person 클래스에서 equals를 정의했기때문에 사람객체만 넣어줘도 됨 (정의하지 않았다면 false값이 나옴)
// boolean result = list.contains("도우너");
boolean result = list.contains(new Person("도우너", 25, 170, 90));
System.out.println(result);
제네릭
제네릭은 내가 해당 객체에 어떤 자료형을 넣을 것인지 미리 선언하는 것이라 보면된다.
꺽새 <>를 사용하여 표현하고, 꺽새 안으로 사용하려는 자료형을 넣어주면 된다.
List<Integer>를 명시하면서 정수형은 리스트에 들어가지만 String타입은 넣으려하면 컴파일 에러가 발생한다.
List에서 객체를 꺼내게되면 Object형태로 꺼내지기에 다운캐스팅을 해줘야하는데, 제네릭을 활용하면 다운캐스팅 없이
활용 가능하다.
이터레이블의 이터레이터
이터레이터를 활용하여 List를 한 번에 모든 원소를 확인하는 것이 가능하다.
이터레이터는 List의 집합에 손을 집어넣어 있어? (hasNext)있으면 가져와(next)를 반복하는 한쌍의 메소드를 활용할 수 있게 해준다.
조건식에서 꺼내 올 것이 있는지 물어보고 있으면 true, 없으면 false 있으면 가져와 ~
혹은 foreach문으로도 모든 원소를 확인하기 편하다. for(꺼내진 원소 보관할 공간 : 배열, 집합과 같은 여러원소를 갖는 것)
contains메소드
리스트에 내가 적은 객체와 같은 값이 있니? true : false
"가"는 있어서 true, "바"는 없어서 false
리스트의 정렬
List의 원소들을 정렬할 땐 서로 비교할 수 있도록 Comparator를 구현해주면 sort메소드를 활용할 수 있게 된다.
그 외에도 이진검색 방법으로 원하는 값의 인덱스를 알려주는 binarySearch
원소 중 최대값과 최소값을 알려주는 max, min
모든 원소 값을 입력값으로 바꿔주는 fill
기존 값을 원하는 값으로 바꿔주는 replaceAll
list와 같은 길이값의 list를 넣으면 복사되는 copy
'국비지원' 카테고리의 다른 글
[JAVA]IOstream - 1 (0) | 2022.12.26 |
---|---|
[JAVA]122206 - Set , LinkedList, Queue, LinkedHashset, TreeSet, Map (0) | 2022.12.07 |
[JAVA]221202 - MouseListener, MouseAdapter, 익명클래스, KeyListener, JDialog (0) | 2022.12.04 |
[JAVA] 221201 - CardLayout, tabbedPane, JCheckBox, JRadioButton (0) | 2022.12.01 |
[JAVA] 221130 - JFrame, swing, swing layout 종류 (0) | 2022.11.30 |