Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .gradle/8.10/fileHashes/fileHashes.bin
Binary file not shown.
Binary file modified .gradle/8.10/fileHashes/fileHashes.lock
Binary file not shown.
4 changes: 4 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules/algorithm.main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions src/basic/datastructure/test/list/ArrayListTest.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package baekjoon.bronze;

import kotlin._Assertions;

import java.io.BufferedReader;
import java.io.IOException;
Expand Down
File renamed without changes.
22 changes: 22 additions & 0 deletions src/main/java/basic/datastructure/Base.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package basic.datastructure;

//모든 자료 구조에 기본적으로 들어가야할 메소드
public interface Base<T> {

/**
* 자료 구조에 들어있는 데이터의 수
*/
int getSize();


/**
* 자료 구조가 비었는지 확인
*/
boolean isEmpty();

/**
* 자료 구조 속 들어있는 데이터 초기화
*/
void clear();

}
10 changes: 10 additions & 0 deletions src/main/java/basic/datastructure/list/AbstractList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package basic.datastructure.list;

public abstract class AbstractList<T> implements List<T>{
protected int size = 0;

@Override
public int getSize(){
return size;
}
}
218 changes: 218 additions & 0 deletions src/main/java/basic/datastructure/list/ArrayList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
package basic.datastructure.list;

public class ArrayList<T> extends AbstractList<T> implements List<T> {
private static final int DEFAULT_SIZE = 10;

private T[] array;

@SuppressWarnings("unchecked")
public ArrayList(){
array = (T[]) new Object[DEFAULT_SIZE];
}

@SuppressWarnings("unchecked")
public ArrayList(int size){
array = (T[]) new Object[size];
}

@SuppressWarnings("unchecked")
public ArrayList(List<T> array){
this.array = (T[]) new Object[array.getSize()];

for(int i = 0 ; i<array.getSize();i++){
this.array[i] = array.get(i);
}

this.size = array.getSize();
}

@Override
public T get(int index) {
checkOutBoundsIndex(index);

return array[index];
}

@Override
public T update(int index, T element) {
checkOutBoundsIndex(index);

checkNullElement(element);

T old = array[index];

//특정 인덱스의 값을 변경
array[index] = element;

return old;
}

@Override
public void delete(int index) {
checkOutBoundsIndex(index);

//특정 인덱스의 값을 삭제하고 앞으로 땡김.
for(int i = index;i<size-1;i++){
array[i] = array[i+1];
}

array[size - 1] = null;
size--;
}

@Override
public int removeAll(T element) {
int count=0;
checkNullElement(element);
for(int i = 0 ; i < size;i++){
if(array[i].equals(element)){
count++;
delete(i);
i--;
}
}

return count;
}

@Override
public void remove(T element) {
checkNullElement(element);
for(int i = 0 ; i < size;i++){
if(array[i].equals(element)){
delete(i);
break;
}
}
}

@Override
public boolean contains(T element) {
checkNullElement(element);

for(int i =0 ; i<size;i++){
if(array[i].equals(element)) return true;
}

return false;
}

@Override
public int findFirstIndex(T element) {
checkNullElement(element);

for(int i =0 ; i<size;i++){
if(array[i].equals(element)) return i;
}
return -1;
}

@Override
public int findLastIndex(T element) {
checkNullElement(element);
for(int i =size-1 ; i>=0;i--){
if(array[i].equals(element)) return i;
}
return -1;
}

@SuppressWarnings("unchecked")
@Override
public void add(T element) {
checkNullElement(element);
if(this.size==array.length){
T[] temp = (T[]) new Object[(this.size + this.size>>1)];

System.arraycopy(array, 0, temp, 0, size);
array = temp;
}

array[size++] = element;
}

@SuppressWarnings("unchecked")
@Override
public void insert(T element, int index) {
checkOutBoundsInsertIndex(index);

checkNullElement(element);

if (size == array.length) {
T[] temp = (T[]) new Object[size + (size >> 1)];

if (index >= 0) System.arraycopy(array, 0, temp, 0, index);

if (size - index >= 0) System.arraycopy(array, index, temp, index + 1, size - index);

array = temp;

} else {
for (int i = size - 1; i >= index; i--) {
array[i + 1] = array[i];
}
}

array[index] = element;
size++;
}

@SuppressWarnings("unchecked")
@Override
public void addAll(List<T> elements) {

int tempSize = elements.getSize() + getSize();
if(array.length < tempSize){
T[] temp = (T[]) new Object[tempSize + tempSize>>1];

System.arraycopy(array, 0, temp, 0, size);

for(int i = 0 ; i<elements.getSize();i++){
temp[size+i] = elements.get(i);
}


array = temp;
}else{
for(int i = 0 ; i<elements.getSize();i++){
array[size+i] = elements.get(i);
}
}
size = tempSize;
}

@Override
public boolean isEmpty() {
return size==0;
}

@SuppressWarnings("unchecked")
@Override
public void clear() {
array = (T[]) new Object[DEFAULT_SIZE];
size =0;
}

private void checkOutBoundsIndex(int index){
String errorMessage = String.format(
"배열의 size는 %d 입니다. 요청하신 index %d는 배열의 범위를 벗어났습니다.",
size, index
);

if(index < 0 || index >= size) throw new ArrayIndexOutOfBoundsException(errorMessage);
}

private void checkOutBoundsInsertIndex(int index){
String errorMessage = String.format(
"배열의 size는 %d 입니다. 요청하신 index %d는 배열의 범위를 벗어났습니다.",
size, index
);

if(index < 0 || index > size) throw new ArrayIndexOutOfBoundsException(errorMessage);
}

private void checkNullElement(T element){
if(element==null){
throw new IllegalArgumentException("null은 입력할 수 없습니다.");
}
}
}
65 changes: 65 additions & 0 deletions src/main/java/basic/datastructure/list/List.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package basic.datastructure.list;

import basic.datastructure.Base;

public interface List<T> extends Base<T> {

/**
* 특정 인덱스의 값을 반환
* */
T get(int index);

/**
* 특정 인덱스의 값 수정.
*/
T update(int index, T element);


/**
* 특정 인덱스의 값을 삭제
*/
void delete(int index);

/**
* 특정 element를 전체 삭제
*/
int removeAll(T element);

/**
* 특정 element 중 첫번째 삭제
*/
void remove(T element);

/**
* 특정 값이 존재하는 지 확인
*/
boolean contains(T element);

/**
* 특정 값을 앞에서부터 탐색하여 몇번째 인덱스에 있는지 확인
* 없으면 -1 반환
*/
int findFirstIndex(T element);

/**
* 특정 값을 뒤에서부터 탐색하여 몇번째 인덱스에 있는지 확인
* 없으면 -1 반환
*/
int findLastIndex(T element);

/**
* 특정 값을 맨마지막에 추가
*/
void add(T element);

/**
* 특정 값을 중간에 추가
*/
void insert(T element, int index);

/**
* 리스트 간의 병합.
* 기존 list 뒤에 병합.
*/
void addAll(List<T> elements);
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.