2013년 6월 11일 화요일
2013년 6월 10일 월요일
temp
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalNumberLabel"
android:text="@string/total_number" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_number_of_people" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="@string/total_amount" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="장소" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="날짜" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlManual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="추가" >
</Button>
<Button
android:id="@+id/smlAuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="주소록" >
</Button>
<Button
android:id="@+id/smlSendMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="그룹목록" >
</Button>
</LinearLayout>
<ListView
android:id="@+id/smlListView"
android:layout_width="fill_parent"
android:layout_height="0px"
android:layout_weight="1"
android:transcriptMode="alwaysScroll" >
</ListView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlConfirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2차입력" >
</Button>
<Button
android:id="@+id/smlCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="전송" >
</Button>
</LinearLayout>
<!-- <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlManual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlManual" >
</Button>
<Button
android:id="@+id/smlAuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlAuto" >
</Button>
<Button
android:id="@+id/smlSendMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlSendMessage" >
</Button>
</LinearLayout>
--></LinearLayout>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalNumberLabel"
android:text="@string/total_number" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_number_of_people" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="@string/total_amount" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="장소" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<!-- 2nd Line -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/totalAmountLabel"
android:text="날짜" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/total_amount" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlManual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="추가" >
</Button>
<Button
android:id="@+id/smlAuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="주소록" >
</Button>
<Button
android:id="@+id/smlSendMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="그룹목록" >
</Button>
</LinearLayout>
<ListView
android:id="@+id/smlListView"
android:layout_width="fill_parent"
android:layout_height="0px"
android:layout_weight="1"
android:transcriptMode="alwaysScroll" >
</ListView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlConfirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2차입력" >
</Button>
<Button
android:id="@+id/smlCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="전송" >
</Button>
</LinearLayout>
<!-- <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom" >
<Button
android:id="@+id/smlManual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlManual" >
</Button>
<Button
android:id="@+id/smlAuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlAuto" >
</Button>
<Button
android:id="@+id/smlSendMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/smlSendMessage" >
</Button>
</LinearLayout>
--></LinearLayout>
2013년 6월 9일 일요일
Thread
Thread
: 프로세스가 하나 시작할려면 많은 자원이 필요하다. 만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당해주어야 한다. JVM은 기본적으로 아무런 옵션 없이 실행하면 OS마다 다르지만 36~64MB의 물리 메모리를 점유한다. 그에 반해서 쓰레드를 추가하면 1MB이내의 메모리를 점유한다. 그래서 쓰레드를 경량 프로세스라고 부른다.
Runnable 인터페이스와 Thread 클래스
: run() : 쓰레드가 시작되면 수행되는 메소드
: 프로세스가 하나 시작할려면 많은 자원이 필요하다. 만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당해주어야 한다. JVM은 기본적으로 아무런 옵션 없이 실행하면 OS마다 다르지만 36~64MB의 물리 메모리를 점유한다. 그에 반해서 쓰레드를 추가하면 1MB이내의 메모리를 점유한다. 그래서 쓰레드를 경량 프로세스라고 부른다.
Runnable 인터페이스와 Thread 클래스
: run() : 쓰레드가 시작되면 수행되는 메소드
결과값이 항상 고정된 값이 나오는 것이 아님.
-> 쓰레드라는것을 start() 메소드를 통해서 시작했다는 것은 프로세스가 아닌 하나의 쓰레드를 JVM에 추가하여 실행한다는 것이다. 쓰레드를 기동시키는 runBasic() 메소드에서 runnable이라는 객체를 Thread 클래스의 start() 메소드로 시작한다. 이때 시작한 start() 메소드가 끝날 때까지 기다리지 않고 그 다음 줄에 있는 thread라는 객체의 start() 메소드를 실행한다. 이 줄도 마찬가지로 새로운 쓰레드를 시작하므로 run() 메소드가 종료될 때까지 기다리지 않고, 바로 다음줄로 넘어간다.
2013년 6월 8일 토요일
java.util 패키지
1. Date와 Calendar
: 날짜 처리
: Calendar
-> public abstract class Calendar extends Object
implements Serializable, Cloneable, Comparalbe<Calednar>
: getInstance() 메소드를 통해 객체 생성
: getInstance() : 기본 객체 생성 메소드, 모든 값은 기본값이며, 현재 시간으로 지정된
Calendar 객체 생상
: getInstance(Locale aLocale) : 지정된 지역의 Calendar 객체 생성
: getInstance(TimeZone, zone) : 지정된 타임존의 Calendar 객체 생성
: getInstance() 메소드를 사용하여 Calendar 객체를 생성할수 있지만 TimeZone과 같이
JDK 기본 API에서는 GregorianCalendar라는 클래스를 제공한다.
: add(int field, int amount) : add(Calendar.DATE, amount) : 지정한 field 값을 amount 만큼 더함.
: roll(int field, int amount) : 지정한 field 값을 amount 만큼 더하는데 그 상위값은 변경x
-> 2000년12월 31일에서 roll()메소드를 사용하면 상위값을 변경하지 않으므로
10일을 더한 2000년 12월 10일이 된다.
2. Collections
: 모든 메소드들이 static 메소드이다.
: 1) 데이터 검색 : binarySearch(), min(), max(), indexOfSubList(), lastIndexOfSubList(),
frequency()
2) 데이터 정렬 : sort()
3) 데이터 순서 변경 : reverse(), shuffle(), swap(), rotate(), reverseOrder()
4) 데이터 변경 및 추가 : fill(), replaceAll(), addAll()
5) 데이터 복사 : copy(), nCopies()
6) 데이터 삭제 : emptySet(), emptyList(), emptyMap()
7) 데이터 추출 : newSetFromMap()
8) 데이터 비교 : disjoint()
9) 타입 변환 : enumeration(), list(), asLifoQueue()
10) 쓰레드 안전 여부 속성 추가 : synchronizedCollection().....
: 대부분의 Collection클래스들은 쓰레드에 안전하게 구현되어 있지 않다. 쓰레드에 안전한 클래스로 사용할려면 synchronizedList..등을 이용하면 된다.
3. Arrays
: 배열을 쉽게 처리하기 위해 도움을 주는 클래스
: 1) 정렬 : sort()
2) 검색 : binarySearch()
3) 비교 : equals(), deepEquals()
4) 데이터 변경 : fill() : 특정 값으로 데이터를 채우는 메소드
5) 복사 : copyOf(), copyOfRange()
6) 변환 : asList()
7) 해시코드 : hashCode(), deepHashCode()
8) 문자열 변환 : toString()
4. StringTokenizer
: 문자열 자르기 위한 클래스
: split() 메소드를 사용하기를 권장함.
5. Properties
6. Random
: 이 클래스는 매개변수가 없는 생성자와 long을 매개변수로 받는 생성자가 있다.
: nextBytes(byte[]), nextInt(), nextInt(int), nextLong(), nextBoolean(), nextFloat(), nextDouble(),
nextGaussian()
7. Formatter
8. java.math 패키지의 BigDecimal 클래스
: float 나 double은 정확한값을 제공하지 않고 근사치를 제공한다. 그러므로 정확한 숫자 계산이 필요할 경우에는 BigDecimal을 사용하여야 한다.
: 정확한 계산을 위해서는 문자열을 매개 변수로 받는 생성자를 사용해야 한다.
: 날짜 처리
: Calendar
-> public abstract class Calendar extends Object
implements Serializable, Cloneable, Comparalbe<Calednar>
: getInstance() 메소드를 통해 객체 생성
: getInstance() : 기본 객체 생성 메소드, 모든 값은 기본값이며, 현재 시간으로 지정된
Calendar 객체 생상
: getInstance(Locale aLocale) : 지정된 지역의 Calendar 객체 생성
: getInstance(TimeZone, zone) : 지정된 타임존의 Calendar 객체 생성
: getInstance() 메소드를 사용하여 Calendar 객체를 생성할수 있지만 TimeZone과 같이
JDK 기본 API에서는 GregorianCalendar라는 클래스를 제공한다.
: add(int field, int amount) : add(Calendar.DATE, amount) : 지정한 field 값을 amount 만큼 더함.
: roll(int field, int amount) : 지정한 field 값을 amount 만큼 더하는데 그 상위값은 변경x
-> 2000년12월 31일에서 roll()메소드를 사용하면 상위값을 변경하지 않으므로
10일을 더한 2000년 12월 10일이 된다.
2. Collections
: 모든 메소드들이 static 메소드이다.
: 1) 데이터 검색 : binarySearch(), min(), max(), indexOfSubList(), lastIndexOfSubList(),
frequency()
2) 데이터 정렬 : sort()
3) 데이터 순서 변경 : reverse(), shuffle(), swap(), rotate(), reverseOrder()
4) 데이터 변경 및 추가 : fill(), replaceAll(), addAll()
5) 데이터 복사 : copy(), nCopies()
6) 데이터 삭제 : emptySet(), emptyList(), emptyMap()
7) 데이터 추출 : newSetFromMap()
8) 데이터 비교 : disjoint()
9) 타입 변환 : enumeration(), list(), asLifoQueue()
10) 쓰레드 안전 여부 속성 추가 : synchronizedCollection().....
: 대부분의 Collection클래스들은 쓰레드에 안전하게 구현되어 있지 않다. 쓰레드에 안전한 클래스로 사용할려면 synchronizedList..등을 이용하면 된다.
3. Arrays
: 배열을 쉽게 처리하기 위해 도움을 주는 클래스
: 1) 정렬 : sort()
2) 검색 : binarySearch()
3) 비교 : equals(), deepEquals()
4) 데이터 변경 : fill() : 특정 값으로 데이터를 채우는 메소드
5) 복사 : copyOf(), copyOfRange()
6) 변환 : asList()
7) 해시코드 : hashCode(), deepHashCode()
8) 문자열 변환 : toString()
4. StringTokenizer
: 문자열 자르기 위한 클래스
: split() 메소드를 사용하기를 권장함.
5. Properties
6. Random
: 이 클래스는 매개변수가 없는 생성자와 long을 매개변수로 받는 생성자가 있다.
: nextBytes(byte[]), nextInt(), nextInt(int), nextLong(), nextBoolean(), nextFloat(), nextDouble(),
nextGaussian()
7. Formatter
8. java.math 패키지의 BigDecimal 클래스
: float 나 double은 정확한값을 제공하지 않고 근사치를 제공한다. 그러므로 정확한 숫자 계산이 필요할 경우에는 BigDecimal을 사용하여야 한다.
: 정확한 계산을 위해서는 문자열을 매개 변수로 받는 생성자를 사용해야 한다.
2013년 6월 2일 일요일
Map 인터페이스
Map
put(K key, V value) : 첫번째 매개변수인 키를 갖고 두번째 매개변수인 값을 갖는 데이터를
저장
putAll(Map<? extends K, ? extends V> m) : 매개 변수로 넘어온 Map의 모든 데이터를 저장
get(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨준다.
remove(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨주며 map에서 삭제
keySet() : Key의 목록을 Set 타입으로 리턴
values() : 값의 목록을 Collection 타입으로 리턴한다.
: 종류 : HashMap, TreeMap, LinkedHashMap
여러 쓰레드에 동시에 접근하여 처리할 필요가 있을 때
Map m = Collections.synchronizedMap(new Hashmap(...));
HashMap
Object -> AbstractMap<K, V> -> HashMap<K, V>
: Serializable, Cloneable, Map<E>
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.put("C", "c");
map.put("D", "d");
Set<String> keySet = map.keySet();
for(String tempKey : keySet){
System.out.println(tempKey + " = " + map.get(tempKey));
}
-> 현재 map에 저장된 key, value에 대한 값을 가져온다.
Set의 값을 뿌려주기 때문에 데이터가 정렬되어 나오진 않는다.
HashMap에 저장하는 키가 되는 객체를 직접 만들었을 경우 유의사항
-> 직접 어떤 클래스를 만들어 그 클래스를 키로 사용할 때에는 Object 클래스의 hashCode() 메소드와 equals() 메소드를 잘 구현해놓아야 한다
-> HashMap에 객체가 들어가면 hashCode() 메소드의 결과 값에 따른 버켓(bucket) 이라는 List 형태의 저장소가 만들어진다. 만약 서로 다른 키가 저장되었는데, hashCode() 메소드의 결과가 동일하다면 이 버켓에 여러개의 값이 들어갈수 잇다. 따라서 get() 메소드가 호출되면 hashCode()의 결과를 확인하고 버켓에 들어간 목록에 데이터가 여러개일경우 equals() 메소드를 호출하여 동일한 값을 찾게 된다.
정렬된 키의 목록을 원한다면 TreeMap 사용
put(K key, V value) : 첫번째 매개변수인 키를 갖고 두번째 매개변수인 값을 갖는 데이터를
저장
putAll(Map<? extends K, ? extends V> m) : 매개 변수로 넘어온 Map의 모든 데이터를 저장
get(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨준다.
remove(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨주며 map에서 삭제
keySet() : Key의 목록을 Set 타입으로 리턴
values() : 값의 목록을 Collection 타입으로 리턴한다.
: 종류 : HashMap, TreeMap, LinkedHashMap
여러 쓰레드에 동시에 접근하여 처리할 필요가 있을 때
Map m = Collections.synchronizedMap(new Hashmap(...));
HashMap
Object -> AbstractMap<K, V> -> HashMap<K, V>
: Serializable, Cloneable, Map<E>
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.put("C", "c");
map.put("D", "d");
Set<String> keySet = map.keySet();
for(String tempKey : keySet){
System.out.println(tempKey + " = " + map.get(tempKey));
}
-> 현재 map에 저장된 key, value에 대한 값을 가져온다.
Set의 값을 뿌려주기 때문에 데이터가 정렬되어 나오진 않는다.
HashMap에 저장하는 키가 되는 객체를 직접 만들었을 경우 유의사항
-> 직접 어떤 클래스를 만들어 그 클래스를 키로 사용할 때에는 Object 클래스의 hashCode() 메소드와 equals() 메소드를 잘 구현해놓아야 한다
-> HashMap에 객체가 들어가면 hashCode() 메소드의 결과 값에 따른 버켓(bucket) 이라는 List 형태의 저장소가 만들어진다. 만약 서로 다른 키가 저장되었는데, hashCode() 메소드의 결과가 동일하다면 이 버켓에 여러개의 값이 들어갈수 잇다. 따라서 get() 메소드가 호출되면 hashCode()의 결과를 확인하고 버켓에 들어간 목록에 데이터가 여러개일경우 equals() 메소드를 호출하여 동일한 값을 찾게 된다.
정렬된 키의 목록을 원한다면 TreeMap 사용
2013년 6월 1일 토요일
Set 인터페이스
Set은 순서에 상관없이, 어떤 데이터가 존재하는지를 확인하기 위한 용도로 많이 사용된다.
-> 중복되는것을 방지하고, 원하는 값이 포함되어 있는지를 확인하는 것.
: 주요 클래스 : HashSet, TreeSet, LinkedHashSet
HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장한다. Set 중에 성능이 제일 좋음
TreeSet : 저장된 데이터의 값에 따라서 정렬되는 셋이다. red-black이라는 트리타입으로 값이
저장되며 HashSet보다 약간 느리다.
LinkedHashSet : 연결된 목록 타입으로 구현된 해시 테이블에 데이터를 저장한다.
저장된 순서에 따라서 값이 정렬. 제일 느림
p.s : red-black : http://ko.wikipedia.org/wiki/레드-블랙_트리
HashSet
: Object -> AbstractCollection<E> -> AbstractSet<E> -> HashSet<E>
AbstractSet은 3개의 메소드만 구현되어 있다.
-> equals(), hashCode(), removeAll()
-> equals()와 hashCode() 메소드를 ㄱ현하는 부분은 Set에서 매우 중요.
: 로드팩터 : (데이터 개수) / (저장 공간) 을 의미.
주요 메소드
add(E e) : 데이터 추가
clear() : 모든 데이터 삭제
clone() : HashSet객체를 복제한다. 하지만 담겨있는 데이터들은 복제하지 않는다.
contains(Object o) : 지정한 객체가 존재하는지 확인
isEmpty() : 데이터가 있는지 확인
iterator() : 데이터를 꺼내기 위한 Iterator 객체를 리턴
-> 중복되는것을 방지하고, 원하는 값이 포함되어 있는지를 확인하는 것.
: 주요 클래스 : HashSet, TreeSet, LinkedHashSet
HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장한다. Set 중에 성능이 제일 좋음
TreeSet : 저장된 데이터의 값에 따라서 정렬되는 셋이다. red-black이라는 트리타입으로 값이
저장되며 HashSet보다 약간 느리다.
LinkedHashSet : 연결된 목록 타입으로 구현된 해시 테이블에 데이터를 저장한다.
저장된 순서에 따라서 값이 정렬. 제일 느림
p.s : red-black : http://ko.wikipedia.org/wiki/레드-블랙_트리
HashSet
: Object -> AbstractCollection<E> -> AbstractSet<E> -> HashSet<E>
AbstractSet은 3개의 메소드만 구현되어 있다.
-> equals(), hashCode(), removeAll()
-> equals()와 hashCode() 메소드를 ㄱ현하는 부분은 Set에서 매우 중요.
: 로드팩터 : (데이터 개수) / (저장 공간) 을 의미.
주요 메소드
add(E e) : 데이터 추가
clear() : 모든 데이터 삭제
clone() : HashSet객체를 복제한다. 하지만 담겨있는 데이터들은 복제하지 않는다.
contains(Object o) : 지정한 객체가 존재하는지 확인
isEmpty() : 데이터가 있는지 확인
iterator() : 데이터를 꺼내기 위한 Iterator 객체를 리턴
LinkedList 클래스
: A라는 하나의 값이 추가되면 열차의 맨 앞칸에 데이터를 집어 넣는다. 이때 LinkedList의 가장 앞의 값도 A이며, 가장 끝에 있는 값도 A이다. 이 상태에서 B라는 데이터를 더 집어 넣으면 가장 앞에 있는 값은 A가 되고 가장 뒤에 있는 값은 B가 된다.
여기서 A는 뒤에 B가 있다는 것을, B는 A가 앞에 있다는 것을 기억하고 있다.
그 다음에 C라는 값을 집어 넣으면 가장 앞에는 A, 그 다음에는 B 마지막에는 C가 위치한다.
여기서 LinkedList는 앞에 있는 애와 뒤에 있는 애만 기억한다. 다시 말해서 A는 뒤에 있는 값이 B라는 것만 알고, C가 있따는 것을 생각도 안한다.
배열의 중간에 있는 데이터가 지속적으로 삭제되고, 추가될 경우에는 LinkedList가 배열보다 메모리 공간 측면에서 훨씬 유리하다.
그 이유는 LinkedList는 중간에 있는 데이터를 삭제하면, 지운 데이터의 앞에 있는 데이터와 뒤에 있는 데이터를 연결하면 그만이다.
LinkedList가 자체가 List이면서 Queue, Deque가 된다.
: Object -> AbstractionCollection<E> -> AbstractList<E> -> AbstractSequentialList<E> -> LinkedList<E>
: 구현한 인터페이스 : Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E>
: addFirst(Object) : LinkedList객체의 가장 앞에 데이터를 추가한다.
: addLast(Object) : LinkedList 객체의 가장 뒤에 데이터를 추가한다.
: set(int, Object) : LinkedList 객체의 특정 위치에 있는 데이터를 수정한다. 그리고 기존에
있던 데이터를 리턴한다.
: getFirst(), peekFirst(), peek(), element() : 객체의 맨 앞에 있는 데이터를 리턴한다.
: getLast(), peekLast() : 객체의 맨뒤에 있는 데이터를 리턴.
: remove(), removeFirst(), poll(), pollFirst() : 객체의 가장 앞에 있는 데이터를 삭제하고 리턴
: pollLast(), removeLast() : 객체의 가장 끝에 있는 데이터를 삭제하고 리턴
: remove(int) : 매개 변수에 지정된 위치에 있는 데이터를 삭제하고 리턴
: listItreator(int) : 매개변수가 지정된 위치로부터의 데이터를 검색하기 위한 ListIterator 객체를 리턴한다.
: Set : 중복된 데이터를 처리
: Queue : 먼저 들어온 데이터를 먼저 처리 FIFO
: 여러 쓰레드에서 들어오는 작업을 순차적으로 처리할대 많이 사용
Shallow copy And Deep copy
Shallow copy와 Deep copy
Shallow copy : list2 = list와 같이 다른 객체에 원본 객체의 주소 값만을 할당하는 것.
Deep copy : 객체의 모든 값을 복사하여 복제된 객체에 있는 값을 변경해도 원본에 영향이
없도록 할 때.
ex) 배열을 복사 할때 System클래스의 arraycopy()와 같은 메소드를 이용하면 Deep copy를
쉽게 처리할 수 있다.
Shallow copy : list2 = list와 같이 다른 객체에 원본 객체의 주소 값만을 할당하는 것.
Deep copy : 객체의 모든 값을 복사하여 복제된 객체에 있는 값을 변경해도 원본에 영향이
없도록 할 때.
ex) 배열을 복사 할때 System클래스의 arraycopy()와 같은 메소드를 이용하면 Deep copy를
쉽게 처리할 수 있다.
각 인터페이스 및 용도
Serializable : 원격으로 객체를 전송하거나, 파일에 저장할 수 있음을 지정
Cloneable : Object 클래스의 Clone() 메소드가 제대로 수행될 수 있음을 지정. 즉 복제가 가능한
객체임을 의미
Iterable<E> : 객체가 "for-each"문장을 사용할수 있음을 지정
Collection<E> : 여러 개의 객체를 하나의 객체에 담아 처리할 때의 메소드ㅡ 지정
List<E> : 목록형 데이터를 처리하는 것과 관련된 메소드 지정
RandomAccess : 목록형 데이터에 보다 빠르게 접근할 수 있도록 임의로 접근하는 알고리즘에
적용된다는 것을 지정
Deque<E> : 맨 앞과 맨 뒤의 값을 용이하게 처리하는 큐와 관련된 메소드 지정
Cloneable : Object 클래스의 Clone() 메소드가 제대로 수행될 수 있음을 지정. 즉 복제가 가능한
객체임을 의미
Iterable<E> : 객체가 "for-each"문장을 사용할수 있음을 지정
Collection<E> : 여러 개의 객체를 하나의 객체에 담아 처리할 때의 메소드ㅡ 지정
List<E> : 목록형 데이터를 처리하는 것과 관련된 메소드 지정
RandomAccess : 목록형 데이터에 보다 빠르게 접근할 수 있도록 임의로 접근하는 알고리즘에
적용된다는 것을 지정
Deque<E> : 맨 앞과 맨 뒤의 값을 용이하게 처리하는 큐와 관련된 메소드 지정
List 인터페이스
List 인터페이스를 구현한 클래스
: ArrayList, Vector, Stack, LinkedList
ArrayList, Vector : 크기 확장이 가능한 배열
ArrayList의 객체는 여러 명이 달려들어 값을 변경하려고 하면 문제가 발생하지만
Vector은 그렇지 않다.
ArrayList는 Thread safe하지 않고 Vector은 Thread safe하다.
Stack : Vector 클래스를 확장하여 만들었다.
LIFO(List in First Out)를 지원하기 위해.
LinkedList : List에 속하면서 Queue에도 속한다.
ArrayList
: Object -> AbstarctCollection<E> -> AbstractList<E> -> Arraylist<E>
: ArrayList에서 구현한 각 인터페이스
-> Serializable, Cloneable, Iterable<E>, Colleciton<E>, List<E>, RandomAccess
Stack 클래스
: Object -> AbstractCollection<E> -> AbstractList<E> -> Vector<E> -> Stack<E>
: 구현한 인터페이스는 ArrayList와 동일
peek() : 객체의 가장 위에 있는 데이터를 리턴한다.
pop () : 객체의 가장 위에 있는 데이터를 지우고, 리턴한다.
push(E item) : 매개 변수로 넘어온 데이터를 가장 위에 저장한다.
search(Object o) : 매개 변수로 넘어온 데이터의 위치를 리턴한다.
: ArrayList, Vector, Stack, LinkedList
ArrayList, Vector : 크기 확장이 가능한 배열
ArrayList의 객체는 여러 명이 달려들어 값을 변경하려고 하면 문제가 발생하지만
Vector은 그렇지 않다.
ArrayList는 Thread safe하지 않고 Vector은 Thread safe하다.
Stack : Vector 클래스를 확장하여 만들었다.
LIFO(List in First Out)를 지원하기 위해.
LinkedList : List에 속하면서 Queue에도 속한다.
ArrayList
: Object -> AbstarctCollection<E> -> AbstractList<E> -> Arraylist<E>
: ArrayList에서 구현한 각 인터페이스
-> Serializable, Cloneable, Iterable<E>, Colleciton<E>, List<E>, RandomAccess
indexOf () : 앞에서부터 찾을때
lastIndexOf() : 뒤에서부터 찾을 때
toArray() : 객체에 있는 데이터들을 배열로 뽑아낼 때 사용
-> toArray()는 리턴 타입이 Object[]이므로 toArray(T[] a)를 사용하는것이 좋다.
String[] strList = list.toArray(new String[0]);
removeAll()사용
ArrayList<String> temp = new ArrayList<String>();
temp.add("A");
list.removeAll(temp); (removeAll(Collection<?> c)
ArrayList를 여러 쓰레드에서 덤벼도 안전하게 만들려면 아래와 같이 객체 생성
Stack 클래스
: Object -> AbstractCollection<E> -> AbstractList<E> -> Vector<E> -> Stack<E>
: 구현한 인터페이스는 ArrayList와 동일
peek() : 객체의 가장 위에 있는 데이터를 리턴한다.
pop () : 객체의 가장 위에 있는 데이터를 지우고, 리턴한다.
push(E item) : 매개 변수로 넘어온 데이터를 가장 위에 저장한다.
search(Object o) : 매개 변수로 넘어온 데이터의 위치를 리턴한다.
자바 컬렉션
자바에서 데이터를 담는 자료구조
1. 순서가 있는 목록인 List형
2. 순서가 중요하지 않은 목록인 Set형
3. 먼저 들어온 것이 먼저 나가는 Queue형
4. 키-값(key-value) 으로 저장되는 Map형
-> 여기서 유일하게 Map만이 Collection과 관련없는 별도의 인터페이스로 선언되어 있다.
1. 순서가 있는 목록인 List형
2. 순서가 중요하지 않은 목록인 Set형
3. 먼저 들어온 것이 먼저 나가는 Queue형
4. 키-값(key-value) 으로 저장되는 Map형
-> 여기서 유일하게 Map만이 Collection과 관련없는 별도의 인터페이스로 선언되어 있다.
public interface Collection<E> extends Iterable<E>
-> Iterator이라는 인터페이스는 추가 데이터가 있는지 확인하는 hasNext() 메소드ㅡ
현재 위치를 다음 요소로 넘기고 그 값을 리턴해주는 Next() 메소드
데이터를 삭제하는 remove(0 메소드가 있다.
피드 구독하기:
글 (Atom)