1. 연결 리스트(LinkedList)
2. iterator
1. 연결 리스트(LinkedList)
[정의]
- 각 Node가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조.
- 데이터를 담고 있는 Node들이 연결되어 있고, Node의 포인터가 이전 노드와 다음 노드와의 연결을 담당합니다.
- Node는 LinkedList에 객체를 추가하거나 삭제하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않습니다.
- List 인터페이스를 구현했기때문에 ArrayList와 사용법 유사(내부 구조는 다르다.)
출처: https://pridiot.tistory.com/66
[ArrayList & LinkedList Append(추가) 비교]
ArrayList<Integer> arr = new ArraryList<Integer>();
LinkedList<Integer> list = new LinkedList<Integer>();
long begin=0;
long end=0;
//순차적으로 데이터 추가 - ArrayList
begin = System.currentTimeMillis() //tick값
for (int i=0; i<1000000; i++) {
arr.add(i);
}
end = System.currentTimeMillis()
System.out.println("ArrayList 작업시간: %,dms\n", end - begin);
//순차적으로 데이터 추가 - LinkedList
begin = System.currentTimeMillis(); //tick
for (int i=0; i<1000000; i++) {
list.add(i);
}
end = System.currentTimeMillis(); //tick
System.out.printf("LinkedList 작업시간: %,dms\n", end - begin);
//OUTPUT
ArrayList 작업시간: 30ms
LinkedList 작업시간: 149ms
----> 순차적인 데이터 추가는 ArrayList가 LinkedList보다 빠르다.
[ArrayList & LinkedList Insert(삽입) 비교]
ArrayList<Integer> arr = new ArrayList<Integer>();
LinkedList<Integer> list = new LinkedList<Integer>();
//배열 중간에 데이터 추가 - ArrayList
begin = System.currentTimeMillis();
for (int i=0; i<10000; i++) {
arr.add(0, i);
}
end = System.currentTimeMillis();
System.out.printf("ArrayList 작업시간: %,dms\n", end - begin);
//배열 중간에 데이터 추가 - LinkedList
begin = System.currentTimeMillis();
for (int i=0; i<10000; i++) {
list.add(0, i);
}
end = System.currentTimeMillis();
System.out.printf("LinkedList 작업시간: %,dms\n", end - begin);
//OUTPUT
ArrayList 작업시간: 4,640ms
LinkedList 작업시간: 1ms
----> 중간 데이터 추가는 LinkedList가 ArrayList보다 압도적으로 빠르다.
[ArrayList & LinkedList Delete(삭제) 비교]
ArrayList<Integer> arr = new ArrayList<Integer>();
LinkedList<Integer> list = new LinkedList<Integer>();
//순차적으로 데이터 삭제(끝->처음) - ArrayList
begin = System.currentTimeMillis();
for (int i=list1.size()-1; i>=0; i--) {
arr.remove(i);
}
end = System.currentTimeMillis();
System.out.printf("ArrayList 작업시간: %,dms\n", end - begin);
//순차적으로 데이터 삭제(끝->처음) - LinkedList
begin = System.currentTimeMillis();
for (int i=list1.size()-1; i>=0; i--) {
list.remove(i);
}
end = System.currentTimeMillis();
System.out.printf("LinkedList 작업시간: %,dms\n", end - begin);
//OUTPUT
ArrayList 작업시간: 7ms
LinkedList 작업시간: 28ms
----> 순차적인 데이터 삭제는 ArrayList가 LinkedList보다 빠르다.
[ArrayList & LinkedList 장,단점]
장점 | 단점 | |
ArrayList | 모든 컬렉션을 통틀어 특정 요소에 접근 속도가 가장 빠르다. | 요소의 추가, 삭제 작업 비용이 많이 든다. |
LinkedList | - ArrayList 단점이 곧 장점 - 요소의 추가, 삭제 작업 비용이 저렴하다. |
- ArrayList 장점이 곧 단점 - 특정 요소에 접근 속도가 느리다. |
- ArrayList와 LinkedList는 서로 상반된다.
- 읽기 작업을 많이 한다면 ArrayList
- 쓰기 작업을 많이 한다면 LinkedList
2. iterator
[정의]
- 컬렉션에 저장된 요소를 접근(탐색)하는데 사용되는 인터페이스이다.
- 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화 -> Iterator인터페이스
- Collection 인터페이스를 상속받는 List와 Set 인터페이스에서도 iterator() 사용 가능
[Iterator 메서드]
boolean hasNext()//읽어올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false
Object next() //다음 요소를 읽어온다. next()호출 전, hasNext()를 호출해서 확인하는것이 안전하다.
void remove() //next()로 읽어온 요소를 삭제한다.
[ArrayList에서의 iterator]
ArrayList<String> list = new ArrayList<String>();
list.add("사과");
list.add("바나나");
list.add("딸기");
list.add("포도");
list.add("귤");
list.add("복숭아");
list.add("참외");
list.iterator();
Iterator<String> iter = list.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
//OUTPUT
사과
바나나
딸기
포도
귤
복숭아
참외
<HashMap에서의 iterator>
HashMap<String, String> map = new HashMap<String, String>();
map.put("과장", "홍길동");
map.put("사원", "아무개");
map.put("대리", "하하하");
map.put("부장", "호호호");
Set<String> set = map.keySet(); //Key 집합 반환
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
String key = iter.next();
System.out.println(key); //key값
System.out.println(map.get(key)); //value값
}
//OUTPUT
부장
호호호
대리
하하하
과장
홍길동
사원
아무개
----> 뒤죽박죽 섞인것은 HashMap 특성상 어쩔 수 없다.
----> HashMap에서의 탐색(iterator)는 키, 값을 나눠서 따로따로 받아야함. > Set
MEMO>
# ArrayList와 LinkedList 어떤것을 쓸지 판단하기는 실질적으로 힘들지만, 보편적으로 읽기작업이 많아서, ArrayList가 많이 쓰인다.
# 컬렉션에서의 탐색 방법은 이전에는 for문, 향상된 for문을 이용했는데 오늘 배운 iterator를 잘 사용해야겠다.
JS과제
js 와 jQuery 로 작성한 코드
변수선언 위치 다시 파악하기
(어디에서 변수선언하는지 몰라서 여러번 위치놓고 찍어봐야됨)
-왜 중괄호 안인지 밖인지 로컬인지 글로벌인지 파악하기
화면에 출력하기 함수가 너무 어려움 ! 문장전체 외워질때까지 익숙해지기
js 와 jQuery 는 혼합해서 작성가능! 주로그렇게씀 (현재)
-지금 쓰는 코드가 jQuery인지 js인지 파악하기
.text 메소드 학습하기 찾아보기
*오늘의 메인학습은 함수안에 for of 반복문 넣어서 예시만들기 였음
객체안의 원하는 값만 부분출력하기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>객체안의 값 부분출력 / 다시구현하기 </title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
<script>
//점수를 ul안에 출력하는 함수를 만드시오
window.onload=function(){
const ar=[
{ireum:'홍길동', jumsu:80}, {ireum:'전우치',jumsu:75}
];
const $list=$('#list');
const $div=$('#target');
let sum=0;
function printAr(arr){
for(const ob of arr){
$( `<li>${ob.ireum}의 점수는 ${ob.jumsu}점</li>`).appendTo($list);
sum+=ob.jumsu;
}
$( `<p>점수합계: ${sum}점</p>`).appendTo($div);
}
// $(`<li>$(ob.eng)</li>`).appendTo($list).css('color','red');
// $(`<li>$(ob.eng)</li>`).appendTo($list);
printAr(ar);
}
//다시구현해보기
//변수선언 위치 파악을 잘모르겠음 여러번 찍어봐야됨 변수선언 위치 다시 파악하기가 제일 중요함 !
</script>
<ul>
<li id="list"></li>
</ul>
<div id="target"></div>
</body>
</html>
'인천일보아카데미 > - 학습일지' 카테고리의 다른 글
[학습일지]JAVA교육일지 40일차 (0) | 2022.06.15 |
---|---|
[학습일지]JAVA교육일지 39일차 (0) | 2022.06.15 |
[학습일지]JAVA교육일지 36일차 (0) | 2022.06.14 |
[학습일지]JAVA교육일지 35일차 (0) | 2022.06.13 |
[학습일지]JAVA교육일지 33일차 (0) | 2022.06.13 |