프로그래밍/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;
}
실행 결과