- List 예제
List 예제
프레임워크 : 기능 수행하기 위한 클래스와 인터페이스의 모임.
Collection 프레임워크 : 객체들의 집합 구현하기 위한 클래스와 인터페이스들의 모임
java.util 패키지에 속함
Collection 인터페이스 : 객체들의 집합
하위인터페이스
1. List 인터페이스 : 객체를 저장한 순서를 유지. 중복가능.
인덱스(첨자) 사용가능. 0부터 시작
구현클래스 : ArrayList, Vector, LinkedList
Vector : Collect 프레임워크이전에 사용되던 클래스
이전의 메서드와 Collection 프레임워크의 메서드
모두 사용가능
2. Set 인터페이스 : 객체를 저장한 순서 모름. 중복불가
구현클래스 : HashSet, TreeSet
Map 인터페이스 : (Key,Value) 쌍인 객체들의 집합
구현클래스 : HashMap, TreeMap
Hashtable <- Properties
📌
package chap13;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListEx1 {
public static void main(String[] args) {
//<Integer> : 제네릭설정. 요소로 저장되는 객체의 자료형 설정
List<Integer> list = new ArrayList<Integer>();
list.add(1);list.add(2);list.add(5);
list.add(4);list.add(3);list.add(0);
// list.add("a"); //Integer 객체가 아니므로 list 객체에 추가불가
System.out.println(list);
//첨자를 사용하여 데이터 출력
for(int i=0;i < list.size();i++) {
System.out.println(i + ":" + list.get(i));
}
//개선된 for 구문으로 데이터 출력
for (Integer i : list) {
System.out.println(i);
}
System.out.println("list2 : ");
//jdk8 이후부터 같은자료형인 경우 자료형을 생략가능
//subList(1, 4) : list의 1번인덱스 부터 3번인덱스 까지의 부분리스트
List<Integer> list2 = new ArrayList<>(list.subList(1, 4));
for (Integer i : list2) {
System.out.println(i);
}
//정렬하기
//Collection 인터페이스
//Collections 클래스 : Collection 객체의 기능을 수행할 수 있는 클래스
//list 객체의 요소들을 정렬하기
Collections.sort(list);
System.out.println(list);
}
}
📌 Collection(List) Exam1.
package chap13;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/*
* 화면에서 홀수개의 정수를 입력받아 입력받은 숫자의 평균과 중간값 출력하기
* 999 숫자 입력된경우 입력 종료
* 평균 : 총합/갯수
* 중간값 : 숫자를 정렬하여 일렬 배치. 가운데 값
* 정렬 : Collections.sort(List)
* 10 40 30 60 30
* 평균 : (10+40+30+60+30)/5
* 중간값 : 10 30 30 40 60 => 30
* [결과]
* 홀수개의 숫자를 입력하세요(종료:999)
* 10 40 30 60 30
* 총합 : 000
* 평균 : 000.0
* 중간값 : 30
*/
public class Exam1 {
public static void main(String[] args) {
System.out.println("홀수개의 숫자를 입력하세요(종료:999)");
Scanner scan = new Scanner(System.in);
double sum = 0;
List<Integer> list = new ArrayList<>();
while(true) {
int num = scan.nextInt();
if(num == 999) break;
list.add(num);
sum += num;
}
if(list.size() % 2 == 0) {
System.out.println("한개 숫자를 더 입력하세요");
int num = scan.nextInt();
list.add(num);
sum += num;
}
Collections.sort(list);
System.out.println("평균값:" + sum/list.size());
System.out.println("중간값:" + list.get(list.size()/2));
}
}
- Collections 클래스
Collections 클래스
sort 메서드 : 정렬기능
요소의 자료형이 Comparable 인터페이스 객체여야함.
=> 요소객체가 Comparable 인터페이스 구현 클래스 객체여야함
=> Data 클래스가 Comparable 인터페이스를 구현해야함.
Comparable 인터페이스 : compareTo() 추상메서드를 가짐
- 정렬관련 인터페이스
정렬관련 인터페이스
1. Comparable : 클래스가 구현하여, 클래스의 객체의 기본 정렬방식 설정에 사용됨
int compareTo(Object o) 추상메서드를 가짐
2. Comparator : 기본정렬방식과 상관없이 실행 중 정렬방식을 설정시 사용됨.
Collections.sort(List, Comparator 객체)
int compare(Object o1, Object o2)
📌
package chap13;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Data implements Comparable<Data> {
int value;
Data(int value) {
this.value = value;
}
public String toString() {
return value+"";
}
@Override
public int compareTo(Data d) {
return (value - d.value) ;
}
}
class Data2 {
int value2;
Data2(int value) {
this.value2 = value;
}
public String toString() {
return value2+"";
}
}
public class ListEx2 {
public static void main(String[] args) {
List<String> list1= new ArrayList<>();
list1.add("9");list1.add("8");list1.add("7");
list1.add("6");list1.add("5");list1.add("0");
System.out.println(list1);
Collections.sort(list1);
System.out.println(list1);
List<Data> list2= new ArrayList<>();
list2.add(new Data(10));
list2.add(new Data(1));
list2.add(new Data(5));
list2.add(new Data(3));
list2.add(new Data(0));
list2.add(new Data(0));
System.out.println(list2);
Collections.sort(list2); //기본 정렬방식대로 정렬
System.out.println(list2);
//역순으로 정렬
Collections.sort(list2,Comparator.reverseOrder());
System.out.println(list2);
List<Data2> list3= new ArrayList<>();
list3.add(new Data2(10));
list3.add(new Data2(1));
list3.add(new Data2(5));
list3.add(new Data2(3));
list3.add(new Data2(0));
list3.add(new Data2(0));
System.out.println("list3:" + list3);
// Collections.sort(list3,(d1,d2)->d1.value2 - d2.value2);
//Comparator 인터페이스 객체 : FunctionalInterface임
//FunctionalInterface 인터페이스 : 추상메서드가 한개만 존재하는 인터페이스
// : 람다방식이 가능
Collections.sort(list3,new Comparator<Data2>() {
public int compare(Data2 d1, Data2 d2) {
return d1.value2 - d2.value2; //양수 : 순서 d2->d1
//음수 : 순서 d1->d2
}
});
System.out.println(list3);
}
}
- Shape 추상 클래스
Shape 추상 클래스 구현하기
추상메서드 : double area()
double length()
Comparable 인터페이스 구현
기본정렬방식 : 넓이의 오름차순으로 설정
Circle 클래스 구현. Shape 클래스 상속
멤버변수 : r
생성자 : 멤버변수 초기화
추상메서드구현하기
Rectangle 클래스 구현. Shape 클래스 상속
멤버변수 : w,h
생성자 : 멤버변수 초기화
추상메서드구현하기
📌
package chap13;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
abstract class Shape implements Comparable<Shape> {
abstract double area();
abstract double length();
public int compareTo(Shape s) {
return (int)(area() - s.area());
}
}
class Circle extends Shape {
int r;
Circle(int r) {
this.r = r;
}
@Override
double area() {
return r*r*Math.PI;
}
@Override
double length() {
return 2*r*Math.PI;
}
public String toString() {
return "반지름:"+r + ",면적:"+area() + ",둘레:"+length();
}
}
class Rectangle extends Shape {
int w,h;
Rectangle(int w, int h) {
this.w = w;
this.h = h;
}
@Override
double area() {
return w*h;
}
@Override
double length() {
return 2*(w+h);
}
public String toString() {
return "("+w +","+h+ "),면적:"+area() + ",둘레:"+length();
}
}
public class ListEx3 {
public static void main(String[] args) {
//<Shape> : list 객체는 Shape 객체의 모임
List<Shape> list = new ArrayList<>();
//Circle 객체는 Shape 객체다.
list.add(new Circle(5)); //list의 요소로 Shapre 객체로 저장
list.add(new Circle(1));
list.add(new Circle(10));
list.add(new Rectangle(6,10));
list.add(new Rectangle(1,2));
for(Shape s: list) System.out.println(s);
//sort메서드에서 list 객체의 각 요소 compareTo 메서드 호출
// Comparable 객체여야함.
Collections.sort(list);
System.out.println("기본 정렬 후:");
for(Shape s: list) System.out.println(s);
System.out.println("면적의 역순으로 정렬 :");
//Comparator 인터페이스 : 실행 중 정렬방식을 변경할 때 사용되는 인터페이스
//reverseOrder() : Comparator 인터페이스 static 메서드 기본정렬방식의 역순으로 정렬할 때 사용.
Collections.sort(list,Comparator.reverseOrder());
for(Shape s: list) System.out.println(s);
System.out.println("둘레 순으로 정렬 :");
/* jdk8 이전 방식
Collections.sort(list,new Comparator<Shape> () {
@Override
public int compare(Shape s1, Shape s2) {
return (int)(s1.length() - s2.length());
}
});
*/
//jdk8 부터 가능 방식
Collections.sort
(list,(s1,s2)->(int)(s1.length() - s2.length()));
for(Shape s: list) System.out.println(s);
System.out.println("둘레 역순으로 정렬 :");
Collections.sort
(list,(s1,s2)->
(int)(Math.round(s1.length()) - Math.round(s2.length())) * -1);
for(Shape s: list) System.out.println(s);
}
}
'수업(국비지원) > Java' 카테고리의 다른 글
| [Java] chap13 : 컬렉션 프레임워크 - Collection(Map, TreeMap) (0) | 2023.04.17 |
|---|---|
| [Java] chap13 : 컬렉션 프레임워크 - Collection(Set, LinkedHashSet, TreeSet) (0) | 2023.04.17 |
| [Java] chap12: 기본 API - 기본 API Exam3. (0) | 2023.04.16 |
| [Java] chap12: 기본 API - Calendar (0) | 2023.04.16 |
| [Java] chap12: 기본 API - 기본 API Exam2.(Date) (0) | 2023.04.16 |