중급과정/HighJava

[Java] 231121_1일차 ArrayList, LinkedList

whalerice 2023. 11. 22. 08:52

 

import java.util.ArrayList;
import java.util.List;

public class T01ArrayListTest {
	public static void main(String[] args) {
		
		// 기본 용량(Default Capacity)은 10 이다.
		List list1 = new ArrayList();
		
		// add()메서드를 사용하여 데이터를 추가한다.
		list1.add("aaa");
		list1.add("bbb");
		list1.add(111); // list1.add(new Integer(111));와 같음
		list1.add('k');	//wrapper class
		list1.add(true);
		list1.add(12.34);
		
		// size() => 데이터 개수
		System.out.println("size => " + list1.size());
		System.out.println("list1 => " + list1);
		
		// get()으로 데이터 꺼내오기
		System.out.println("1번째 자료 => " + list1.get(0));
		
		// 데이터 끼워넣기도 add() 사용한다.
		list1.add(0, "zzz");
		System.out.println("zzz 끼워넣은 후 => "+ list1);
		
		// 데이터 변경하기(set 메서드 사용)
		String temp = (String) list1.set(0, "YYY");  //set(바꿀위치,바꿀내용)
		System.out.println("temp=> " + temp);
		System.out.println("데이터 변경 후 list1 => " + list1);
		
		// 데이터 삭제하기(remove메서드 이용)
		list1.remove(0);		//int값 -> index값
		System.out.println("첫번째 데이터 삭제 후 => " + list1);
		
		list1.remove("bbb");	//object값 -> 위치는 모르는데 값을 알아 
		System.out.println("bbb 삭제 후 => " + list1);
		System.out.println("---------------------------------------");
		
		// 111 지우기...
		
		list1.remove(new Integer(111)); //객체를 만들어서 지정해줘야함
		System.out.println("111삭제 후 => " +list1);
		///////////////////////////////////////////////////////////
		//String만 담을 List
		List<String> list2 = new ArrayList<String>();
		list2.add("AAA");
		list2.add("BBB");
		list2.add("CCC");
		list2.add("DDD");
		list2.add("EEE");
		
		for (String str : list2) {
			System.out.println(str);
		}
		
		
		// contains(비교객체) => 리스트에 '비교객체'가 있으면 true
		//							없으면 false를 반환함.
		System.out.println(list2.contains("DDD")); // true
		System.out.println(list2.contains("ZZZ")); // false
		
		// indexOf(비교객체) => 리스트에서 '비교객체'를 찾아 '비교객체'가
		//						존재하는 index 값을 반환함. 없으면 -1 반환함.
		System.out.println("DDD의 index값: "+ list2.indexOf("DDD"));
		System.out.println("ZZZ의 index값: "+ list2.indexOf("ZZZ"));
		System.out.println("--------------------------------------");
		
		for(int i=0; i<list2.size(); i++) {
			list2.remove(i);	//모든 데이터 값 지우기 
			System.out.println(i + " 삭제함.");
		}
		System.out.println("list2 의 크기 => " + list2.size());
		
		
		
		
	}
}

 

 

LinkedList (ArrayList와의 차이점 구분하기)

  • Stack  (넣을때 push, 꺼낼때 pop) :

우물모양에 차곡차곡 쌓아서 꺼낼땐 가장 나중에 넣은게 나옴. (후입선출) LIFO : Last In First Out

 

  • Queue (넣을때 offer, 꺼낼때 poll)

가장 먼저 넣은게 가장 먼저 나옴. (선입선출) FIFO : First In First Out

import java.util.LinkedList;

public class T02StackQueueTest {
	public static void main(String[] args) {
	/*
	 		Stack => 후입선출(LIFO)의 자료 구조 last in first out ex)웹서핑할때 뒤로가기 버튼
	 		Queue => 선입선출(FIFO)의 자료 구조 first in first out
	 */
		
		
		LinkedList<String> stack = new LinkedList<String>();
		
		
	/*
	 	Stack방식의 동작을 위한 메서드
	 	1) 자료 입력: push(저장할 값)
	 	2) 자료 출력: pop() => 자료를 꺼내온 후 꺼내온 자료를 stack에서
	 						삭제한다.
	 */
		stack.push("홍길동");
		stack.push("일지매");
		stack.push("변학도");
		stack.push("강감찬");
		System.out.println("현재 stack값들: " + stack);
		
		String data = stack.pop();
		System.out.println("꺼내온 자료: "+data);
		System.out.println("꺼내온 자료: "+stack.pop());
		System.out.println("현재 stack값들: " + stack);
		
		
		stack.push("성춘향");
		System.out.println("현재 stack값들: " + stack);
		System.out.println("꺼내온 자료: "+stack.pop());
		System.out.println("====================================");
		System.out.println();
		
		
		LinkedList<String> queue = new LinkedList<String>();
		/*
		 	Queue 방식의 동작을 위한 메서드
		   1) 자료 입력: offer(저장할값)
		   2) 자료 출력: poll() => 자료를 Queue에서 꺼내온 후 꺼내온 자료는
		   						Queue에서 삭제한다.
		 */
		
		queue.offer("홍길동");
		queue.offer("일지매");
		queue.offer("변학도");
		queue.offer("강감찬");
		
		System.out.println("현재 queue의 값: " + queue);
		
		String temp = queue.poll();
		System.out.println("꺼내온 자료: " + temp);
		System.out.println("꺼내온 자료: " + queue.poll());
		System.out.println("현재 queue의 값: " + queue);
		
		if(queue.offer("성춘향")) {
			System.out.println("신규 등록 자료: 성춘향");
		}
		System.out.println("현재 queue의 값: " + queue);
		System.out.println("꺼내온 자료: " + queue.poll());
		
	}
	
	
}

 

 

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class T03ListSortTest {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		
		list.add("일지매");
		list.add("홍길동");
		list.add("성춘향");
		list.add("변학도");
		list.add("이순신");
		
		System.out.println("정렬 전 : " + list);
		
		// 정렬은 Collection.sort()메서드를 이용하여 정렬한다.
		// 정렬은 기본적으로 '오름차순 정렬'을 수행한다.
		
		Collections.sort(list); //오름차순으로 정렬하기
		System.out.println("정렬 후 : " + list);
		
//		Collections.reverse(list); //내림차순
//		System.out.println("내림차순 정렬 후 : "+ list);
		
		// 섞기..
		Collections.shuffle(list);
		System.out.println("섞은 후 : " + list);
		
		Collections.sort(list, new Desc());
		System.out.println("외부정렬자를 이용한 정렬 후 : " + list);
		
	}
}

// 정렬방식을 결정하는 클래스(외부정렬자)는 Comparator를 구현해야 한다.
class Desc implements Comparator<String> {
	/*
	 	compare()메서드의 반환값을 결정하는 방법
	 	=> 이 메서드가 양수를 반환하면 두 값의 순서가 바뀐다.(오름차순이 기본임)
	 	
	 	- 오른차순 정렬일 경우 
	 	=> 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 한다.
	 	
	 */

	@Override
	public int compare(String str1, String str2) {
		
		return str1.compareTo(str2) * -1;
	}
	
}

 

 

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class T04ListSortTest {
	public static void main(String[] args) {
		
		List<Member> memList = new ArrayList<Member>();
		
		memList.add(new Member(1, "홍길동", "010-1111-1111"));		
		memList.add(new Member(5, "변학도", "010-1111-2222"));		
		memList.add(new Member(9, "성춘향", "010-1111-3333"));		
		memList.add(new Member(3, "이순신", "010-1111-4444"));		
		memList.add(new Member(6, "강감찬", "010-1111-5555"));		
		memList.add(new Member(2, "일지매", "010-1111-6666"));		
		
		
		System.out.println("정렬 전: " );
		
		for (Member mem : memList) {
			System.out.println(mem);
		}
		
		Collections.sort(memList);
		
		System.out.println("정렬 후 : " );
		for (Member mem : memList) {
			System.out.println(mem);
		}
	}
}

// 회원정보를 담기위한 클래스 정의
class Member implements Comparable<Member> {
	private int num;		// 번호
	private String name;	// 이름
	private String tel;		// 전화번호
	public Member(int num, String name, String tel) {
		super();
		this.num = num;
		this.name = name;
		this.tel = tel;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	
	@Override
	public String toString() {
		return "Member [num=" + num + ", name=" + name + ", tel=" + tel + "]";
	}
	
	//회원이름을 기준으로 오름차순 정렬하기
	@Override
	public int compareTo(Member mem) {
		return this.getName().compareTo(mem.getName());
	}
	
}