01. Java (v)
02. git
03. Database
04. Jsp [Server]
05. 미니프로젝트 (3W)
06. HTML,CSS
07. JS
08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)
삽입,삭제
는 빠르고 탐색과 메모리 효율성
이 느리다.
LinkedList는
특정 인덱스의 객체를 제거
하면앞 뒤 링크만 변경
되고나머지 링크는 변경되지 않아
빈번한 객체의 삭제와 삽입은 ArrayList보다 좋은 성능 발휘
LinkedList<String> list = new LinkedList<>();
list.add("홍길동");
list.add("홍길자");
list.add("홍길동");
list.add("이순신");
System.out.println(list.toString());
System.out.println("리스트 크기:"+list.size());
// 값 얻기
String name=list.get(0);
System.out.println("0번쨰 위치한 값:"+name);
// 값 변경
list.set(0, "신사임당");
System.out.println(list.toString());
// 값 삭제
list.remove(3);
System.out.println(list.toString());
// 추가적으로 사용할 수 있는 기능
// 앞뒤로 추가하기 기능
list.addFirst("홍");
list.addLast("홍");
System.out.println(list.toString());
System.out.println("앞에서 삭제된 값:"+list.removeFirst());
System.out.println("뒤에서 삭제된 값:"+list.removeLast());
System.out.println(list.toString());
Queue
// 자바에서 기본큐는 LinkedList를 이용해서 사용
// LinkedList를 Queue인터페이스에 저장하면, 큐처럼 동작
Queue<Integer> queue = new LinkedList<>();
// 값 추가하기 - offer
queue.offer(5);
queue.offer(3);
queue.offer(4);
queue.offer(6);
queue.offer(7);
System.out.println(queue.toString());
System.out.println("큐의 크기 : "+queue.size());
// 값 제거하기(가장 처음 들어간 요소) - poll
System.out.println(queue.poll());
System.out.println(queue.poll());
// 값 확인하기(가장 처음의 요소) peek
System.out.println(queue.peek());
System.out.println(queue.toString());
// 큐에 있는 값을 순서대로 꺼내보기
// 큐가 비어있는지 확인한 후에
while(!queue.isEmpty()) {
System.out.println(queue.poll());
}
우선순위 큐(Priority Queue)
// 값을 자동 정렬해서 추가
Queue<Integer> queue = new PriorityQueue<>();
//값 뒤에 추가
queue.offer(4);
queue.offer(5);
queue.offer(3);
queue.offer(2);
queue.offer(1);
System.out.println(queue.toString());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println("-".repeat(30));
Queue<User> que = new PriorityQueue<>();
// compare, compareTo 함수는 앞의 값에서 뒤의 값을 뺀 값이 음수가 나오면 그대로 유지하고
// 양수가 나오면 서로의 위치를 바꾼다.
// 우선순위 큐가 순서를 확인할 때 compareTo메서드의 존재여부를 확인
// compareTo메서드에 정의된 순서에 따라 우선순위 값을 지정
// 객체에 comparable인터페이스를 상속받아서 compareTo메서드를 오버라이딩
// 문자열 비교
// a.compareTo(b) -> a문자열의 값-b문자열의 값
System.out.println("홍길동".compareTo("홍길자"));
que.offer(new User("홍길동",10));
que.offer(new User("홍길자",30));
que.offer(new User("이순신",20));
que.offer(new User("신사임당",5));
System.out.println(que.toString());
System.out.println(que.poll().toString());
System.out.println(que.poll().toString());
System.out.println(que.poll().toString());
System.out.println(que.poll().toString());
// 객체 class
public class User implements Comparable<User>{
private String name;
private int age;
@Override
public int compareTo(User u) {
// 숫자비교
// Wrapper클래스에 compare메서드
int age = u.getAge();
return Integer.compare(this.age, age); // 나이 기준 오름차순
// return Integer.compare(age, this.age); // 나이 기준 내림차순
// String name= u.getName();
// return this.name.compareTo(name); // 이름기준 오름차순
// return name.compareTo(this.name); // 이름기준 내림차순
};
}
양방향 큐(Deque)
// 양방향 큐
Deque<Integer> deque = new ArrayDeque<>();
/ 뒤에서 추가하기
deque.offerLast(3);
deque.offerLast(2);
deque.offerLast(1);
deque.offerLast(4);
deque.offerLast(5);
System.out.println(deque.toString());
/ 앞에서 꺼내기
System.out.println(deque.pollFirst());
System.out.println(deque.pollFirst());
System.out.println(deque.toString());
/ 앞에서 추가하기
deque.offerFirst(10);
deque.offerFirst(20);
deque.offerFirst(30);
System.out.println(deque.toString());
/ 뒤에서 꺼내기
System.out.println(deque.pollLast());
System.out.println(deque.pollLast());
System.out.println(deque.toString());
System.out.println(deque.peekFirst());
System.out.println(deque.peekLast());