![](https://blog.kakaocdn.net/dn/bimXkN/btrCPHJUTtH/WN5KPac6PFLS9f0UksBVZ1/img.jpg)
list (리스트)
노드로 이루어져 있으며 배열의 데이터를 유동적으로 대처하기가 어려운 단점을 대처 할 수 있다.
배열의 단점
- 선형 검색으로 보통의 시나리오에서 데이터를 검색하는데 시간이 오래 걸린다.
- 선언시 공간을 미리 할당하기 때문에 자료를 추가하는데 복잡함이 생기며 메모리의 공간이 낭비될 수 있다.
- 앞의 인덱스 데이터를 삭제할 경우 복잡함이 발생한다.
1. 크기문제 : 크기를 유연하게 대처할 수 있다.
2. 데이터의 추가 삭제 : 비지니스 로직에 따른 데이터의 추가 삭제가 유연하다.
사용환경
배열 - 데이터가 고정적일때
리스트 - 데이터가 유동적일때
- 단일 연결 리스트
단방향 구조
![](https://blog.kakaocdn.net/dn/cXSNkH/btrCPHJUvQQ/ij304Rdk8fmlqkSD6xfyv0/img.png)
- 이중연결 리스트
쌍방향 구조
Access가 단일 연결리스트보다 빠르다.
![](https://blog.kakaocdn.net/dn/diobIm/btrCRRyxneK/tnHC8plupgA1v1iQZRO6K1/img.png)
* 리그레션 테스트 (Regresion test) : 이미 테스트된 프로그램의 테스팅을 반복하는 것으로, 결함 수정 이후 변경의 결과로 새롭게 만들어 지거나, 이전 결함으로 인해 발견되지 않았던 또 다른 결함을 발견하는 테스트.
* 단일 연결 리스트 : 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조.
* 멀티플랙서(mux) : 여러 아날로그 또는 디지털 입력 신호 중 하나를 선택하여 선택된 입력을 하나의 라인에 전달하는 장치이다.
list container (리스트 컨테이너)
시퀀스 컨테이너의 일종이며 순서를 유지하는 구조이며 노드를 기반으로 하고있다.
![](https://blog.kakaocdn.net/dn/0c2EI/btrCVR5ocAY/pLklGqYHlrHH2flIV6g781/img.png)
설계
1. Node data 생성 (독립적 데이터)
※독립적 데이터 부터 생성해야한다.
1-2. 데이터 생성
1-3. 생성자 생성
1-4. 오버로딩 생성자 생성
![](https://blog.kakaocdn.net/dn/bph7I6/btrCVSDdwHe/pj34iGsSklzfGDpK1Slha1/img.png)
2. 모듈 구현 테스트 (단위 테스트)
(기사 시험 : 단위 테스트 -> 통합테스트 -> 시스템테스트 -> 인수테스트)
2-1. 메인 메소드에서 임포트 선언
2-2. 생성자, 메인 생성자 값 대입 및 디버깅
3. Node 생성
※ Node 는 Node data에 종속되어있다.
3-1. 노드 데이터 참조값 생성
3-2. 넥스트 노드 참조값 생성
![](https://blog.kakaocdn.net/dn/ypkKO/btrCMXfJVVM/Vw6ohKzbZIlHOyubhHlTD0/img.png)
3-3. 기본 생성자 생성
![](https://blog.kakaocdn.net/dn/bRMzjG/btrCPGYwLuq/WrPQgyzeWDQNrgZLdZBYEk/img.png)
3-4. 오버로딩 생성자 생성
![](https://blog.kakaocdn.net/dn/lzVYd/btrCMMYjCAt/qKoM1ZdjVmHvVRBlmFpduk/img.png)
3-5. 인텔리전트 생성자 생성
![](https://blog.kakaocdn.net/dn/ebzBSB/btrCQ7t6rlm/JPplfV9aFK6lzd6LHYQ2f1/img.png)
3-6. 데이터, 넥스트 게터&세터 생성
3-7. 메인 클래스 노드 선언
3-8 테스트
![](https://blog.kakaocdn.net/dn/60ygB/btrCS0oshMk/Ljkc2Jd52KHFKkS0BrTJi1/img.png)
4. ListContainer 클래스 생성
4-1. 노드 헤드, 노드 카운트,
![](https://blog.kakaocdn.net/dn/df441E/btrCMXGMyPK/xkBjH7WYrhBRfOPleZLd61/img.png)
4-2. 생성자 생성
![](https://blog.kakaocdn.net/dn/bjdUaK/btrCPHXuCy1/UvKKFrSKqNV8BLNeOfOup1/img.png)
4-3. 인서트 노드 생성자 생성
![](https://blog.kakaocdn.net/dn/2rWxI/btrCQ7gytge/ueUa4zOSN5rDZVDF4btZt1/img.png)
4-4. 인서트 노트 타입 2 생성자 생성
![](https://blog.kakaocdn.net/dn/btjBhv/btrCUmkvNqx/7FylCpQDIgiKqk9xUhUuP1/img.png)
4-5. 제일 뒤 에 새로운 노드를 넣는 생성자 생성
· 노드가 있는 경우
마지막 노드를 찾는다.
마지막 노드 .setNext(새로운 노드의 참조값)
![](https://blog.kakaocdn.net/dn/xeiB3/btrCUmx1pMh/i99uutspujkpU8oMpkxnbK/img.png)
![](https://blog.kakaocdn.net/dn/vdruF/btrCOJVxNHR/V0lHlL4uhuE5J0Uf5au0c0/img.png)
![](https://blog.kakaocdn.net/dn/lWhPU/btrCVe0Qdlc/J4G5JFLTJf0fwkuY3orEQK/img.png)
![](https://blog.kakaocdn.net/dn/cFt91m/btrCUly7gXV/LJwuUOup7i9EVOZWLXIBq1/img.png)
· 헤드가 null인 경우 새로운 노드의 참조값을 헤드에 넣는다.
head == null
head = 새로운 노드의 참조값
![](https://blog.kakaocdn.net/dn/d6SIDx/btrCVRK4KYv/a3M9lrruGuKxf8EqEkLgaK/img.png)
![](https://blog.kakaocdn.net/dn/bqRnEu/btrCS0WhpmN/WeN8fxL9EZaQcXbi1f7Zn0/img.png)
· 각 노드의 데이터를 출력하는 생성자 생성 및 디버깅
![](https://blog.kakaocdn.net/dn/bcC96E/btrCMYlohcY/8NP4yyfjIqLmVtaYvo6FIk/img.png)
![](https://blog.kakaocdn.net/dn/30fa9/btrCNOpdwp3/Gmmz8t3shf90ukF6Xyvj40/img.png)
'JAVA' 카테고리의 다른 글
[Java] Comment(주석), 클래스(class), 생성자, 정보은닉 (0) | 2022.05.31 |
---|---|
[Java] 리터럴(Literal), 연산자 (0) | 2022.05.30 |
[Java] 패키지, 버블소트 (0) | 2022.05.23 |
[Java] 배열 랜덤수 검사하기. (0) | 2022.05.23 |
[Java] return, new, 2차원 배열 (0) | 2022.05.23 |