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>
- CompareModel
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 = 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";
}
}
- CompareController
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는 같음
- 검색기능(contain(), get())이 없는 대신에 하나씩 꺼낼 수 있는 Iterator를 제공
- Set을 하나씩 가져오기 편리하도록 iterator()로 쪼갠 후 next()로 가져옴
- index.jsp
<%@ 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>
- SetModel
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>(); //다형성 활용
//Set도 Collection interface를 구현받으므로 List와 사용법이 비슷
//add()로 추가, remove()로 삭제, size()로 크기확인, clear()로 비우기
//검색이 불하능한 Set의 특성상 contains()나 get() 메서드는 사용 불가
public void addData(String val) {
//데이터 추가(중복값을 받지 않음)
//객체는 같은 클래스라 하더라도 복사 시 일련번호가 달라서 중복으로 생각하지 않음
set.add(val);
//System.out.println("set의 데이터 수 : " + set.size());
}
public ArrayList<String> getData() {
//set에서 데이터 뽑는 방법 1
//1.꺼내기 편하게 쪼개줌
Iterator<String> iter = set.iterator();
ArrayList<String> list = new ArrayList<String>();
while(iter.hasNext()) { //2.꺼낼 값이 있으면 true
String val = iter.next();
//System.out.println(val);
list.add(val);
}
return list;
//set에서 데이터 뽑는 방법 2(향상된 for문 활용-바람직한 방법X)
/*
*
* for(String val : set) {
* list.add(val);
* } return list;*/
}
}
- SetController
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");
//System.out.println(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);
}
}
'코딩도전기 > MVC' 카테고리의 다른 글
Servlet (0) | 2023.12.14 |
---|---|
CODO Day26_JAVA_MVC(Map – Hash Map) (2) | 2023.03.09 |
CODO Day24~25_JAVA_MVC(Generic) (0) | 2023.03.07 |
CODO Day23~24_JAVA_MVC(Collection Framework - ArrayList/Vector) (0) | 2023.03.06 |
CODO Day23_JAVA_MVC(Exception) (0) | 2023.03.06 |