중간 부분에 데이터를 넣고자 할 때는 LinkedList가 마지막 부분에 데이터를 넣고자 할때는 ArrayList가 속도면에서 빠르다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
</style>
</head>
<body>
<h3>ArrayList & LinkedList의 속도 비교</h3>
<!-- ArrayList & LinkedList에 100만개의 데이터를 넣을 것이다 -->
<form action="compare">
<input type="text" name="cnt" value="1000000"/>개의 데이터를
<select name="pos">
<option value="mid">중간부분</option>
<option value="last">끝부분</option>
</select>
에 넣기
<button>시작</button>
</form>
<h3>ArrayList : ${arrList}</h3>
<h3>LinkedList : ${lnkList}</h3>
</body>
<script>
</script>
</html>
package kr.co.web.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.co.web.model.CompareModel;
@WebServlet("/compare")
public class CompareController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String cnt = req.getParameter("cnt");
String pos = req.getParameter("pos");
System.out.println(cnt +"/" +pos);
CompareModel model = new CompareModel(pos, cnt);
req.setAttribute("arrList", model.testArrayList());
req.setAttribute("lnkList", model.testLinkedList());
RequestDispatcher dis = req.getRequestDispatcher("index.jsp");
dis.forward(req, resp);
}
}
package kr.co.web.model;
import java.util.ArrayList;
import java.util.LinkedList;
public class CompareModel {
String pos;
int cnt;
long startTime;
long endTime;
ArrayList<String> arrList = new ArrayList<String>();
LinkedList<String> lnkList = new LinkedList<String>();
public CompareModel(String pos, String cnt) {
// 1. 위치, 반복 횟수를 받아서 초기화
this.pos = pos;
this.cnt = Integer.parseInt(cnt);
// 2. ArrayList와 LinkedList의 100개 데이터를 집어 넣는다.
// - 가운데 값을 넣으려면 중간값이라는게 존재해야하므로
for (int i=0;i<=100;i++) {
arrList.add("data");
lnkList.add("data");
}
}
public String testArrayList() {
startTime = System.currentTimeMillis();
for(int i = 0; i<=cnt;i++) {
if(pos.equals("mid")) {
arrList.add(55,"add_data");
}else {
arrList.add("add_data");
}
}
endTime = System.currentTimeMillis();
return pos +" 부분에 걸린시간 : "+(endTime-startTime)+ "ms";
}
public String testLinkedList() {
startTime = System.currentTimeMillis();
for(int i = 0; i<=cnt;i++) {
if(pos.equals("mid")) {
lnkList.add(55,"add_data");
}else {
lnkList.add("add_data");
}
}
endTime = System.currentTimeMillis();
return pos +" 부분에 걸린시간 : "+(endTime-startTime)+ "ms";
}
}