프로그래밍/java

[JAVA] LinkedList<E>, Collections

승민아 2022. 6. 5. 22:18
  • java.util.LinkedList
  • List 인터페이스를 구현한 컬렉션 클래스
  • Vector, ArrayList 클래스와 유사하게 작동
  • 요소 객체들은 양방향으로 연결
  • 요소 객체는 맨 앞, 맨 뒤, 중간에 삽입 가능
    • 스택, 큐로 사용 가능

 

LinkedList

LinkedList<String> l = new LinkedList<String>();

 

LinkedList 예문

public class Test {
	
	public static void main(String[] args) {
		LinkedList<String> lst = new LinkedList<String>();
		lst.add("AAA");
		lst.add("BBB");
		lst.add(1,"CCC");
		lst.addFirst("DDD");
		lst.addLast("EEE");
		System.out.println(lst);
		
		lst.removeFirst();
		lst.removeLast();
		System.out.println(lst);
		
		lst.remove("CCC"); // lst.remove(1)과 동일 <- 1번 인덱스 삭제
		System.out.println(lst);
	}
}

 

실행 결과

 

Collections 클래스 활용 (interface collection과 구별됨)

Collections 클래스

  • java.util.Collections
  • collection 클래스에 대해 유용한 정적 메소드들을 제공함
    • 컬렉션에 대해 연산을 수행하고 결과로 컬렉션을 리턴해줌
    • 모든 메소드는 static 타입이다.
  • 주요 메소드
    • 컬렉션에 포함된 요소들을 정렬하는 sort() 메소드
    • 요소의 순서를 반대로 하는 reverse() 메소드
    • 요소들의 최대, 최솟값을 찾아내는 max(), min() 메소드
    • 특정 값을 검색하는 binarySearch() 메소드

 

(예제) 문자열 정렬, 역순 정렬, 이진 탐색

public class Test {
	
	public static void main(String[] args) {
		LinkedList<String> myList = new LinkedList<String>();
		myList.add("트랜스포머");
		myList.add("스타워즈");
		myList.add("매트릭스");
		myList.add(0,"터미네이터");
		myList.add(2,"아바타");
		System.out.println(myList);
		
		Collections.sort(myList);
		System.out.println(myList);
		
		Collections.reverse(myList);
		System.out.println(myList);
		
		int index = Collections.binarySearch(myList,"아바타")+1;
		System.out.println("아바타는 "+index+"번째에 존재");
		
	}
}

 

실행 결과

 

Collections 클래스는 java.lang.Comparable 을 구현한 값에만 작동한다. (기본자료형, String)

프로그래머는 작성한 클래스에 java.lang.Comparable을 구현해야 함.

-> Comparable의 compareTo()가 구현되어 있어야 정렬이 가능함.

 

(예제) 정렬 가능한 클래스 만들기

class Student implements Comparable<Student>
{
	String name;
	int age;
	String tel;
	
	Student(String n, int a, String t)
	{
		this.name=n; this.age=a; this.tel=t;
	}
	
	public int compareTo(Student o) // 범위 안줄이기위해 public해야함
	{
		return name.compareTo(o.name);
		
	}
	
	public String toString()
	{
		return name+"-"+age+"-"+tel;
	}
}

public class Test {
	
	public static void main(String[] args) {
	
		
		Student s1 = new Student("가", 20, "010-1");
		Student s2 = new Student("나", 21, "010-2");
		Student s3 = new Student("다", 22, "010-3");
		LinkedList<Student> lst = new LinkedList<Student>();
		
		lst.add(s2); lst.add(s3); lst.add(s1);
		System.out.println(lst);
		
		Collections.sort(lst);
		System.out.println(lst);
		
		Collections.reverse(lst);
		System.out.println(lst);
		
	}
}

실행 결과

 

(예제) 나이순으로 정렬을 원할 경우

public int compareTo(Student o) // 범위 안줄이기위해 public해야함
{
	//return name.compareTo(o.name);
	return age-o.age;
}

 

실행 결과