ArrayList는 트리 구조와 그래프 구조에서 가장 사용이 많이 하는 구조인데요. ArrayListd의 경우에는 메모리의 주소값을 보내는 방식으로 사용되기 때문에, 다른 리스트와는 조금씩 다른 구조를 가지고 있습니다.
단순한 데이터의 리스트들은 데이터의 추가와 삭제가 빠르지만, 주소값을 가지고 찾아가기 때문에 바로 뒤에 있는 데이터만 인식하지 다른 장소에 있는 데이터를 찾으려면 절차가 복잡해지는 방법이 있죠.
하지만, 배열의 경우에는 인덱스 번호의 접근이 용이하다는 점이 장점입니다. 하지만 위와 같이 데이터 추가와 삭제는 느린 편이죠.
서론
(1) LinkedList배열도 제네릭 기법을 사용합니다.
LinkedList도 제네릭 기법을 사용하며 객체를 생성해주어야 하는데요 아래와 같이 말이죠.
LinkedList<String> list = new LinkedList<String>
추가할 때도 ArrayList의 추가와 마찬가지로 (.)을 이용해서 추가할 수 있습니다. 물론 출력할 때도 리스트에 저장된 것을 가지고 와야 하기 때문에 Type의 변수 = list.getFirst(); 가장 처음에 있는 이름을 꺼내옵니다.라고 출력하실 수 있습니다.
list.add("우아개발")
list.add("초보개발자")
list.add("중급개발자")
String name = list.getFirst();
System.out.println(name);
물론, 뒤에 있는 자료도 가져올 수 있는데요. 아래처럼 getLast라고 작성해서 메서드를 작성한다면 가장 뒤에 있는 "중급개발자"라는 값을 가지고 오게 되죠.
String nameLast = list.getLast();
System.out.println(nameLast);
추가내용) 만일 트리구조와 같이 LikedListd를 사용하게 된다면, 아래와 같은 클래스를 만들어야 하는데요. 이 점은, 자료 구조이기 때문에 다음 포스팅에서 정리하도록 하겠습니다.
class Node {
Person p;
Node next;
}
class Node{ //하나의 데이터와 주소를 저장하는 변수
Person p;
next; //다음 데이터의 위치를 저장하는 위치
}
본론
(1) ArrayList 는 제네릭기법을 사용합니다.
ArrayList는 어떤 타입으로 지정할 것인지 타입을 지정하고 <>에 타입을 저장해 줍니다. 문자면 문자로 저장을 하고, 클래스타입이면 클래스 타입을 작성해 주죠. 저는 문자 타입으로 먼저 작성하겠습니다.
ArrayList<String> namelist = ArrayList<String>();
* 추가 설명 : 제네릭 타입에 대한 내용 ArrayList를 사용하기 위해서는 저장할 타입을, 꺽쇠 (<>) 안에 적어주어야 하는데요. 이때 만일 클래스를 지정해 주었다면 이 꺽쇠 안에 본인의 만든 클래스 타입으로 배열을 생성할 수 있습니다.
* ArrayList는 데이터가 삽입되면 자동으로 크기가 커지고 제거되면 자동으로 크기가 작아지는데, 중간에 데이터가 삽입되면 위치부터 모든 데이터가 뒤로 이동합니다.
* 제네릭에서는 기본 자료형은 절대 사용이 불가합니다. 그렇기 때문에 기본 자료형을 쓰려고 한다면 기본 자료형을 클래스화 시키는 랩퍼클래스를 사용합니다. 예를 들면 double, long, boolean 등은 첫 글자만 대문자로 변경하면 됩니다.
* 하지만 int는 intteger로 char는 character 으로 저장해 줍니다.
(2) ArrayList 값의 추가 list.add (맨 마지막에 데이터를 추가)
ArrayList의 추가하는 방법은 배열명을 추가해 주고 add를 눌러 추가해 줍니다.
naemlist.add("우아개발");
namelist.add("우아하지않은 개발");
naemlist.add("보름");
naemlsit.add("리아");
System.out.println(namelist);
(2-1) 만일 중간 값에 값을 입력하고 싶다면?
만일 우아 개발과 우아하지 않은 개발 사이에 중간 값을 넣고 싶다면, 어떻게 해야 할까요? 우리는 인덱스 번호를 어떻게 주어야 할까요? 하지만 고민할 필요 없이, 우리가 넣고 싶은 인덱스번호에 입력해 주면 됩니다. 우리는 저 둘 사이의 번호를 넣고 싶으니, 인덱스 번호 1번을 주는 것이 맞겠네요.
namelist.add(1,"우울한 개발");
(3) ArrayList 값의 삭제 list.remove
그럼 삭제할 때는 어떻게 삭제할까요? 이때 삭제는 인덱스 타입으로도 삭제할 수 있고, 배열로 삭제할 수 있는데요.
namelist.remove("우아개발");
System.out.println(namelist);
(4) ArrayList 값의 출력 (list.indexOF("입력값"))
이렇게 삭제할 대상을 지정하고 삭제합니다. ArrayList의 경우에는 인덱스 번호가 부여되어 있죠. 출력하는 것도 마찬가지로, get을 이용하고 인덱스 번호를 통해 출력할 수 있습니다.
System.out.println(namelist.get(0));
그렇다면, 어떤 데이터를 찾고자 할 때는 어떤 명령어를 사용하게 될까요? indeOf를 사용하게 됩니다.
indexOf("찾는 입력데이터")를 작성하면, 자바에서는 출력 값을 값이 있으면 값이 있는 인덱스 번호를 반환할 것이고 없으면 -1을 반환할 것입니다.
System.out.prinltn(namelist.indexOf("우아개발")
(5) ArrayList 값의 수정 : list.get(인덱스 번호)
만일 여러분들이 값의 수정을 원한다면, 출력하는 값의 인덱스 번호를 사용할 필요가 있는데요. 값을 수정하고 싶다고 하실 때는 인덱스 번호를 검색하신 후 get을 이용하여 수정해 줍니다. 아래와 같이 말이죠. 저는 우아 개발을 우와개발로 변경해 보겠습니다.
namelist.set(0,"우와개발");
System.out.println(namelist);
(6) 배열의 길이를 확인하고 싶을 때는 size를 이용합니다.
int size = namelist.size();
System.out.println("namelist 사이즈" + size);
(7) 배열의 전체 삭제
배열 안에 있는 전체 데이터를 삭제하고 싶다면? clear를 사용할 수 있습니다.
namelist.clear();
System.out.println(namelist);
(8) 배열의 정렬
배열의 정렬을 할 때는 어떤 기준으로 정렬을 할지 따로 지정할 수 있지만, 조건이 없다면 오름차순으로 정렬을 할 수 있습니다.
namelist.sort(null);
System.out.println(namelist);
(9) for 문 활용하기 :너의 배열에 "우아 개발이 있니?"
for문을 활용해서 데이터를 하나씩 꺼내서 그 안에 있는 name과 비교할 수 있는데, 이 때는 아래의 코드처럼 작성합니다.
for(int i = 0; i < list.size(); i+++) {
if(list.get(i).getName().equlas("우아개발")) {
System.out.println(list.get(i));
}
}
System.out.println(result);
하지만 코드를 이렇게 작성한다면 복잡해질 수 있는데요. 아래와 같이 temp를 이용해서 정리할 수도 있습니다.
(클래스명) temp = list.get(i);
String temp2 = list.get(i).getName();
if(temp2. equals("우아개발")) {
System.out.Println(list.get(i));
}
}
(10) for each 문 list에서 하나씩 꺼내오는 최근의 방법
for(클래스명 tmep : list) {
if(temp.getName().equals("김준완" )) {
System.out.println(temp)
}
}
결론 : 코드 정리 생략
'JAVA' 카테고리의 다른 글
JAVA에서 MySQL의 데이터를 연결하자 #2 값 입력 : PrintStackTrace (0) | 2023.10.31 |
---|---|
JAVA에서 MySQL의 데이터를 연결하자 #1 Connection (0) | 2023.10.30 |
그래픽을 활용한 자바 : GUI 체크박스 만들기와 그룹의 생성 (1) | 2023.10.26 |
그래픽을 활용한 자바 : GUI 창 위치와 크기 설정하기 (1) | 2023.10.26 |
댓글