코딩도전기/MVC
CODO Day25_JAVA_MVC(Linked List/Set Collection(HashSet))
by 코도꼬마
2023. 3. 8.
Linked List
- 사용방법은 Array List와 같음
- Array List와 달리 Linked List는 좌우 데이터의 주소를 기억하는 구조
- 전체 index가 움직이지 않고 좌우 주소값만 기억하기 때문에 중간 index에 데이터 추가/삭제 시 효율적임
- 중간에 값을 넣을 경우 속도가 빠르지만 마지막 위치에 넣을 경우 Array List보다 느림
- index.jsp(AraayList와 LinkedList의 속도 비교)
- 동기방식 : 서버에서 응답이 올 때까지 아무것도 할 수 없음(반복실행시키면 사)
테스트의 결과가 나올 때까지 브라우저의 로딩바가 계속 돌아감
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<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>AraayList와 LinkedList의 속도 비교</h3>
<!-- ArrayList와 LinkedList에 100만개의 데이터를 넣어서 처리속도 비교 -->
<form action="compare">
<input type="text" name="cnt" value="1000000"/>개의 데이터를
<select name="pos">
<option value="last">끝 부분</option>
<option value="mid">중간 부분</option>
</select>에 넣기
<button>시작</button>
</form>
<h3>ArrayList : ${arrList}</h3>
<h3>LinkedList : ${lnkList}</h3>
</body>
<script></script>
</html>
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) {
this.pos = pos;
this.cnt = Integer.parseInt(cnt);
for(int i = 1; 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 "소요시간 : " + (endTime - startTime) + "ms";
}
public String testLinkedList() {
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";
}
}
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);
}
}
Set Collection
- Set interface를 구현받는 HashSet / TreeSet이 있음
- TreeSet은 잘 사용하지 않음
- 순서가 유지 되지 않아 중복을 허용하지 않음(index가 없어서 중복값을 구별할 수 없기 때문)
- List와 구현받는 인터페이스는 동일하기 때문에 기본적인 method는 같음
Written by zer0box
- 검색기능(contain(), get())이 없는 대신에 하나씩 꺼낼 수 있는 Iterator를 제공
- Set을 하나씩 가져오기 편리하도록 iterator()로 쪼갠 후 next()로 가져옴
Written by zer0box
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<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>
h4{
display: inline;
}
</style>
</head>
<body>
<h3>Set에 데이터 넣기</h3>
<form action="addData">
<input type="text" name="data"/>
<input type="submit" value="추가"/>
</form>
<a href="getData">Set에서 가져오기</a>
<br/>
<c:forEach items="${setList}" var="item">
<h4>${item}</h4>
</c:forEach>
</body>
<script></script>
</html>
package kr.co.web.model;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetModel {
private static Set<String> set = new HashSet<String>();
public void addData(String val) {
set.add(val);
}
public ArrayList<String> getData() {
Iterator<String> iter = set.iterator();
ArrayList<String> list = new ArrayList<String>();
while(iter.hasNext()) {
String val = iter.next();
list.add(val);
}
return list;
}
}
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.SetModel;
@WebServlet(urlPatterns = {"/addData","/getData"})
public class SetController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uri = req.getRequestURI();
String ctx = req.getContextPath();
String addr = uri.substring(ctx.length());
RequestDispatcher dis;
String data = req.getParameter("data");
SetModel model = new SetModel();
if(addr.equals("/addData")) {
model.addData(data);
}
if(addr.equals("/getData")) {
req.setAttribute("setList",model.getData());
}
dis = req.getRequestDispatcher("index.jsp");
dis.forward(req, resp);
}
}
가져오기 링크 클릭 후