많은 수의 데이터를 다룰때 사용하는 자료구조로, 각 데이터를 인덱스와 1:1 대응
하도록 구성되어있음
데이터가 메모리 상에 연속적으로 저장되어있음
-> 이로 인해 인접한 메모리에 빠르게 엑세스 가능
데이터의 추가/삭제가 번거로운 편
데이터를 추가하거나 삭제할려면 새로운 배열(메모리)을 생성해야함
(길이가 fix 되어있기떄문에)public static void main(String[] args){
// ArrayList - 1차원, 2차원
ArrayList list2 = new ArrayList(Arrays.asList(1,2,3));
list2.add(4); list2.add(5);
list2.remove(2);
list2.remove(Integer.valueOf(2)); // 2라는 값을 제거!
System.out.println("list2 = " + list2);
ArrayList list2d = new ArrayList();
ArrayList list1d1 = new ArrayList(Arrays.asList(1,2,3));
ArrayList list1d2 = new ArrayList(Arrays.asList(4,5,6));
list2d.add(list1d1);
list2d.add(list1d2);
}
배열 구현 예시
public class MyArray {
int[] arr;
// 배열의 초기 사이즈 설정
MyArray(int size){
this.arr = new int[size];
}
// 배열에 데이터 삽입
public void insertData(int index, int data){
if(index < 0 || index > this.arr.length-1){
System.out.println("Index Error");
return;
}
int[] arrDup = this.arr.clone();
this.arr = new int[this.arr.length+1];
for (int i = 0; i < index; i++) {
this.arr[i] = arrDup[i];
}
for(int i = index + 1; i < this.arr.length; i++){
this.arr[i] = arrDup[i-1];
}
this.arr[index] = data;
}
// 배열에서 특정 데이터 삭제
public void removeData(int data){
int targetIndex = -1;
for(int i = 0; i < this.arr.length; i++){
if(this.arr[i] == data){
targetIndex = i;
break;
}
}
if(targetIndex == -1){
System.out.println("해당 데이터가 없습니다.");
}else {
int[] arrDup = this.arr.clone();
this.arr = new int[this.arr.length - 1];
for (int i = 0; i < targetIndex; i++) {
this.arr[i] = arrDup[i];
}
for (int i = 0; i < this.arr.length; i++) {
this.arr[i] = arrDup[i + 1];
}
}
}
}
// 피크 값을 출력하는 로직 구현(피크 : 양쪽의 값보다 큰 경우)
public static void main(String[] args){
int[] arr = {3,1,2,6,2,2,5,1,9,10,1,11};
for(int i = 0; i<arr.length; i++){
if(i == 0 && arr[i] > arr[i+1]){
System.out.print(arr[i] + " ");
}else if (i == arr.length - 1 && arr[i] >arr[i - 1]){
System.out.print(arr[i] + " ");
}else{
if(arr[i] > arr[i - 1] && arr[i] > arr[i+1]){
System.out.print(arr[i] + " ");
}
}
}
System.out.println();
}
// 오름차순 구현
public static void main(String[] args){
int[] arr = {5, 3, 1, 4, 6, 1};
int[] visited = new int[arr.length];
int visitCnt = 0;
int minVal = Integer.MAX_VALUE;
int minIdx = -1;
while(visitCnt < arr.length){
for(int i = 0; i < arr.length; i++){
if(arr[i] < minVal && visited[i] == 0){
minVal = arr[i];
minIdx = i;
}
}
if(minIdx != -1){
System.out.print(minVal + " ");
visited[minIdx] = 1;
visitCnt++;
}
minVal = Integer.MAX_VALUE;
minIdx = -1;
}
System.out.println();
}
public class Practice {
// 중복 값을 제거한 새 배열 만들기
public static void main(String[] args){
int[] arr = {1,5,3,2,2,3,1,4,1,2,3,5};
int[] arrResult = new int[arr.length];
int cnt = 0;
for (int i = 0; i < arr.length; i++) {
boolean dupFlag = false;
for(int j = 0; j < cnt; j++){
if(arr[i] == arrResult[j]){
dupFlag = true;
}
}
if(!dupFlag){
arrResult[cnt++] = arr[i];
}
}
for (int i = 0; i < cnt; i++) {
System.out.print(arrResult[i] + " ");
}
System.out.println();
}
}
public class Practice {
// 2차원 배열 arr을 시계방향으로 90도 회전시킨 결과물 출력
// 입출력 예시:
// arr: result:
// 1 2 3 4 5 11 6 1
// 6 7 8 9 10 12 7 2
// 11 12 13 14 15 13 8 3
// 14 9 4
// 15 10 5
public static void main(String[] args){
int[][] arr = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
int[][] arr90 = new int[arr[0].length][arr.length];
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
int r = arr.length - 1 - i;
arr90[j][r] = arr[i][j];
}
}
}
}