Java

#042 배열을 리스트로 변경하기 !!

Ahn_Bo 2020. 12. 10. 12:09

기존 배열 코드를 리스트로 변경!

//From 배열
private Article[] articles;
//To 리스트
private List<Article> articles;


//Restart 

public class App {
	//originCode : private Article[] articles;
	//originCode2 : private ArrayList<Article> articles; => 뒤에 new ArrayList가 있어서 Array 생략 가능
	private List<Article> articles;
	//이제 아래 두개 코드 삭제 가능
	private int lastArticleId;
	//private int articlesSize;

public App() {
	//originCode : articles = new Article[32];
	//originCode2 : new ArrayList<Article>(); => 앞에 <Article> 이 언급되어 있어서 뒤에 는 생략 가능.
	articles = new ArrayList<>();
	
	//삭제~
	lastArticleId = 0;
	//articlesSize = 0;

전체코드에 배열을 리스트로 교체 시도한 코드

더보기
package com.sbs.example.easytextboard;

+import java.util.ArrayList;
+import java.util.List;
 import java.util.Scanner;

public class App {
-	private Article[] articles;
+	private List<Article> articles;
	private int lastArticleId;
-	private int articlesSize;

	public App() {
-		articles = new Article[32];
		lastArticleId = 0;
-		articlesSize = 0;
+		articles = new ArrayList<>();

		for (int i = 0; i < 32; i++) {
			add("제목" + (i + 1), "내용" + (i + 1));
		}
	}

-	private int articlesSize() {
-		return articlesSize;
-	}
-
	private Article getArticle(int id) {
		int index = getIndexById(id);

		if (index == -1) {
			return null;
		}

-		return articles[index];
-	}
-
-	private boolean isArticlesFull() {
-		return articlesSize == articles.length;
+		return articles.get(index);
	}

	private int add(String title, String body) {
		// 만약에 현재 꽉 차 있다면
		// 새 업체과 계약한다.

-		if (isArticlesFull()) {
-			System.out.printf("== 배열 사이즈 증가(%d => %d) ==\n", articles.length, articles.length * 2);
-
-			Article[] newArticles = new Article[articles.length * 2];
-
-			for (int i = 0; i < articles.length; i++) {
-				newArticles[i] = articles[i];
-			}
-
-			articles = newArticles;
-		}

		Article article = new Article();

		article.id = lastArticleId + 1;
		article.title = title;
		article.body = body;
-
-		articles[articlesSize] = article;
-
-		articlesSize++;
+		articles.add(article);
		lastArticleId = article.id;

		return article.id;
@@ -72,16 +49,12 @@ private void remove(int id) {
			return;
		}

-		for (int i = index + 1; i < articlesSize(); i++) {
-			articles[i - 1] = articles[i];
-		}
-
-		articlesSize--;
+		articles.remove(index);
	}

	private int getIndexById(int id) {
-		for (int i = 0; i < articlesSize(); i++) {
-			if (articles[i].id == id) {
+		for (int i = 0; i < articles.size(); i++) {
+			if (articles.get(i).id == id) {
				return i;
			}
		}
@@ -139,42 +112,23 @@ public void run() {

				System.out.println("== 게시물 검색 ==");

-				int searchResultArticlesLen = 0;
+				List<Article> searchResultArticles = new ArrayList<>();

-				// 검색된 결과의 수를 먼저 구하기
-				for (Article article : articles) {
-					if (article == null) {
-						break;
-					}
-
-					if (article.title.contains(searchKeyword)) {
-						searchResultArticlesLen++;
+						searchResultArticles.add(article);
					}
				}

-				Article[] searchResultArticles = new Article[searchResultArticlesLen];
-
-				int searchResultArticlesIndex = 0;
-				for (Article article : articles) {
-					if (article == null) {
-						break;
-					}
-
-					if (article.title.contains(searchKeyword)) {
-						searchResultArticles[searchResultArticlesIndex] = article;
-						searchResultArticlesIndex++;
-					}
-				}
-
-				if (searchResultArticles.length == 0) {
+				if (searchResultArticles.size() == 0) {
					System.out.println("검색결과가 존재하지 않습니다.");
					continue;
				}

				System.out.println("번호 / 제목");

				int itemsInAPage = 10;
-				int startPos = searchResultArticles.length - 1;
+				int startPos = searchResultArticles.size() - 1;
				startPos -= (page - 1) * itemsInAPage;
				int endPos = startPos - (itemsInAPage - 1);

@@ -188,7 +142,7 @@ public void run() {
				}

				for (int i = startPos; i >= endPos; i--) {
-					Article article = searchResultArticles[i];
+					Article article = searchResultArticles.get(i);

					System.out.printf("%d / %s\n", article.id, article.title);
				}
@@ -201,15 +155,15 @@ public void run() {

				System.out.println("== 게시물 리스트 ==");

-				if (articlesSize() == 0) {
+				if (articles.size() == 0) {
					System.out.println("게시물이 존재하지 않습니다.");
					continue;
				}

				System.out.println("번호 / 제목");

				int itemsInAPage = 10;
-				int startPos = articlesSize() - 1;
+				int startPos = articles.size() - 1;
				startPos -= (page - 1) * itemsInAPage;
				int endPos = startPos - (itemsInAPage - 1);

@@ -223,21 +177,20 @@ public void run() {
				}

				for (int i = startPos; i >= endPos; i--) {
-					Article article = articles[i];
+					Article article = articles.get(i);

					System.out.printf("%d / %s\n", article.id, article.title);
				}
			} else if (command.startsWith("article detail ")) {
				int inputedId = 0;
				

				try {
					inputedId = Integer.parseInt(command.split(" ")[2]);
-				}
-				catch ( NumberFormatException e ) {
+				} catch (NumberFormatException e) {
					System.out.println("게시물 번호를 양의 정수로 입력해주세요.");
					continue;
				}
				

				System.out.println("== 게시물 상세 ==");

				Article article = getArticle(inputedId);

 

 

 

 

 

*전체적인 일상은 노션을 통해 작성하고 있습니다.

링크 : www.notion.so/013-f85aa506c0f944c98e97245e436e0872