티스토리 뷰
**StringBuilder
=>변경할 수 있는 문자열 저장에 사용
=>변경하지 않는 문자열을 저장하게 되면 메모리 낭비가 됩니다.
=>문자열을 편집하는 작업을 연속해서 수행할 때 이 클래스의 객체를 이용합니다.
1.생성자
StringBuilder()
StringBuilder(String str)
2.메소드
void append(String str): 저장된 문자열에 str의 내용을 추가
리턴하는 것이 아니고 현재 문자열에 추가
String toString(): 저장된 문자열을 String으로 리턴해주는 메소드
=>웹이나 파일의 내용을 읽을 때 부분적으로 읽어서 StringBuilder에 보관한 뒤 전부 읽고 나면 다시 String에 저장해서 사용합니다.
**fast enumeration - for each
=>컬렉션의 모든 요소를 순서대로 접근하도록 해주는 것
=>컬렉션(배열, List, Set)
for(임시변수 : 컬렉션이름){
}
컬렉션의 모든 요소가 임시변수에 순서대로 대입됩니다.
String [] ar = {"Morning", "Afternoon", "Evening"};
//ar 배열의 모든 요소를 순서대로 접근해서 출력
int size = ar.length;
for(int i=0; i<size; i++){
System.out.println(ar[i]);
}
//빠른 열거 이용
for(String temp : ar){
System.out.println(temp);
}
**Generics : 일반화 프로그래밍
=>클래스 내부 데이터의 자료형을 컴파일 할 때 결정하지 않고 객체를 생성할 때 결정지어서 사용하는 것
=>클래스를 만들 때는 <미지정자료형>으로 자료형을 만들어두고 사용한 후 객체를 만들때 실제 자료형을 결정해서 메소드나 인스턴스 변수의 자료형을 결정하는 것
1. 사용 이유
=>알고리즘이 동일한 메소드를 자료형 문제 때문에 여러 번 구현하는 것을 없애기 위해서
=>컬렉션을 만들 때 자료형에 제한을 두어서 동일한 자료형만으로 컬렉션을 만들기 위해서
2.클래스에 제너릭이 적용되어 있으면 객체를 만들 때 자료형을 지정해주는 것이 바람직한데 만일 지정하지 않으면 Object로 치환됩니다.
ex)제너릭이 적용된 클래스 사용
package str;
//미지정 자료형을 사용하는 클래스
public class Disp <E> {
//배열의 내용을 모두 출력하는 메소드
public void display(E [] ar){
for(E imsi : ar){
System.out.print(imsi + "\t");
}
System.out.println();
}
}
package str;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
//제너릭이 적용된 클래스의 객체를 자료형을 지정하지 않고 생성
ArrayList al = new ArrayList();
//String을 삽입했지만 Object로 대입
al.add("Hello");
//데이터를 꺼내면 역시 Object
Object imsi = al.get(0);
//대입될 때의 자료형으로 변환해서 사용
System.out.println(((String)imsi).toUpperCase());
//처음부터 자료형을 결정하고 생성
ArrayList<String> al1 = new ArrayList<String>();
//지정한 자료형을 삽입
al1.add("Hello");
//꺼내도 지정한 자료형으로 나오므로 바로 사용 가능
System.out.println(al1.get(0).toUpperCase());
Disp<String> ob1 = new Disp<String>();
String [] sr = {"java", "javascript", "python", "r"};
ob1.display(sr);
//java 1.7이상 버전에서는 객체를 만들 때는 자료형 생략 가능
Disp<Integer> ob2 = new Disp<>();
Integer [] ir = {1,1,2,3,5,8,13,21};
ob2.display(ir);
}
}
3.제너릭의 자료형으로 기본형은 사용할 수 없습니다.
제너릭의 자료형은 참조형 만 가능하므로 기본형을 사용하고자 하는 경우에는 아래처럼 wrapper 클래스로 기재하셔야 합니다.
int -> Integer, double -> Double
이제부터 제공되는 클래스를 확인할 때 제너릭 사용여부도 같이 확인
**java.util 패키지
=>자료구조 클래스, 날짜, Random 클래스를 소유한 패키지
=>자바 프로그래밍 전 영역에서 많이 사용
=>자주 사용하기 때문에 상단에 java.util.* 로 import 해놓고 사용하는 경우가 많습니다.
=>java.lang 패키지의 클래스는 더 자주 사용되기 때문에 기본적으로 import java.lang.* 이 되어 있는 상태입니다.
1.java.util.Arrays 클래스
=>배열을 조작하기 위한 클래스
=>모든 메소드가 static 메소드이므로 객체를 생성할 필요가 없는 클래스
static String toString(배열이름): 배열 요소의 toString을 호출해서 하나의 문자열로 만든 후 리턴 - 배열의 모든 요소를 확인하고자 할 때 사용하면 편리합니다.
static List asList(배열이름): 배열을 List로 변경해서 리턴
static boolean equals(배열1, 배열2): 배열1과 배열2의 모든 요소가 같은지를 리턴
static void sort(배열): 배열의 모든 요소를 오름차순 정렬
단 배열의 요소가 Comparable 인터페이스를 implements 해야 합니다.
static void sort(배열, Comparator <?>): 배열의 모든 요소를 Comparator로 비교해서 오름차순 정렬합니다.
static int binarySearch(배열, 요소): 배열에서 요소가 있으면 그 위치를 리턴하고 없으면 음수를 리턴하는데 배열의 데이터가 정렬되어 있을 때만 정확한 위치를 리턴합니다.
1)sorting(정렬)
=>데이터를 크기 순으로 나열하는 것
=>ascending(오름차순): 작은 것에서 큰 것 순으로 나열
=>descending(내림차순): 큰 것에서 작은 것 순으로 나열
=>데이터를 정렬하기 위해서는 크기 비교가 가능해야 합니다.
=>숫자 데이터는 크기 비교가 가능하기 때문에 정렬이 가능합니다.
package utiltest;
//java.util 패키지에 있는 모든 클래스들은 이름만으로 사용가능
import java.util.*;
public class ArraysMain1 {
public static void main(String[] args) {
int [] ar = {30, 50, 70, 20, 10};
//ar의 내부 데이터 확인
//배열은 toString()이 재정의 되어 있지 않아서
//클래스 이름과 주소가 나오게 됩니다.
System.out.println(ar);
//Arrays의 toString을 호출
System.out.println(Arrays.toString(ar));
//ar 배열의 데이터 정렬
Arrays.sort(ar);
System.out.println("=====정렬 후=====");
System.out.println(Arrays.toString(ar));
}
}
=>참조형은 기본적으로 크기 비교가 안됩니다.
=>참조형 데이터는 기본적으로 정렬이 불가능하지만 Comparable 인터페이스를 implements 하면 그 인터페이스의 compareTo 라는 메소드를 이용해서 크기 비교를 할 수 있습니다.
=>참조형 중에 Comparable 인터페이스를 implements 한 클래스는 정렬이 가능합니다.
String 배열은 정렬이 가능 : String 은 Comparable 인터페이스를 implements 했기 때문에
System.out.println("=================");
String [] sr = {"자바", "자바스크립트", "파이썬", "알", "씨"};
System.out.println(Arrays.toString(sr));
Arrays.sort(sr);
System.out.println("=====정렬 후=====");
System.out.println(Arrays.toString(sr));
=>Comparable 인터페이스를 implements 하지 않은 클래스의 객체 배열을 sort 하고자 할 때는 Comparator<배열의 요소에 해당하는 클래스이름>를 상속받는 객체를 만들어서 compare 메소드를 재정의 합니다.
그 이 재정의한 클래스의 객체를 sort 메소드의 2번째 매개변수로 대입하면 됩니다.
'IT > JAVA' 카테고리의 다른 글
9. Java Map,Set (0) | 2017.11.09 |
---|---|
8. Java 유용한 API (0) | 2017.11.09 |
6. Java 주요 클래스 (0) | 2017.11.09 |
5. Java 상속과 다형성 (0) | 2017.11.09 |
4. Java 클래스 기본 개념 (0) | 2017.11.09 |