ArrayList / Vector / LinkedList
::::특별한 Java Story 2013. 6. 26. 00:14 |package ch11;
import java.util.ArrayList;
import java.util.Collections;
public class ArrayListEx1 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList(10);
list1.add(new Integer(5));
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3));
ArrayList list2 = new ArrayList(list1.subList(1,4)); // subList 메서드 (from, to)
//1번배열부터 ~ 4번배열까지 짤라오는데 4번 배열은 포함하지 않음..-ㅁ-; 장난?
print1(list1);
print2(list2);
Collections.sort(list1);
Collections.sort(list2);
print1(list1);
print2(list2);
System.out.println("list1.containsAll(list2) : "+list1.containsAll(list2));
// list1 에 list2 가 포함되어 있느냥?!
//----------------------------------------------------------------------------
list2.add("B");
list2.add("C");
list2.add(3,"A"); //지정된 위치에 object 를 저장한다. list2배열 3번째에 "A"를 넣어라 이거쥐~
print2(list2);
list2.set(3, "AA"); //지정된 위치에 object 로 바꿔라~ "AA"로 바뀐걸 볼 수 있당!
print1(list1);
print2(list2);
System.out.println("list1.retainAll(list2) : "+ list1.retainAll(list2));
// list1에서 list2와 겹치는 부분만 남기고 모두 삭제해라~!
//아래 결과로 확인해보자!!
print1(list1); //공통된것만 남기고 모두 삭제됐다.ㅋ
print2(list2);
for (int i = list2.size()-1; i >= 0; i--)
{
if(list1.contains(list2.get(i))) //만약 list2 에 list1 값이 포함되어있다면
list2.remove(i); //list2 에 그 값을 제거해라~
}
print1(list1);
print2(list2);
}
private static void print2(ArrayList list2) {
System.out.println("list2 : "+list2);
}
private static void print1(ArrayList list1) {
System.out.println("list1 : "+list1);
}
}
----------------------------------------------------------------------------------------------
package ch11;
import java.util.ArrayList;
import java.util.List;
public class ArrayListEx2 {
public static void main(String[] args) {
final int LIMIT = 10;
String source = "0123456789abcdefghijABCDEFGHIJ!@#$%^&*()ZZZ";
int length = source.length(); //String source 의 길이~~ 43
List list = new ArrayList(length/LIMIT + 10); // 14.3 의 공간 생성
for(int i =0;i<length;i+=LIMIT) //10씩 증가
{
if(i+LIMIT<length) //10 - 20 - 30 - 40
list.add(source.substring(i, i+LIMIT)); //substring --> i 번째[0]부터 (i+LIMIT)-1 번째까지 반환
else
list.add(source.substring(i));
}
for(int i =0;i<list.size();i++) //위 결과값을 담은 list 를 1씩 증가한 값을 출력해랑~! OK!
{
System.out.println(list.get(i));
}
}
}
--------------------------------------------------------------------------------------------------------
package ch11;
import java.util.Arrays;
public class CopyTest {
public static void main(String[] args) {
int[] data = {0,1,2,3,4}; //1차원 배열 생성
int[] sCopy = null;
int[] dCopy = null;
sCopy = shallowCopy(data);
dCopy = deepCopy(data);
System.out.println("Original : "+Arrays.toString(data));
System.out.println("shallow : "+Arrays.toString(sCopy));
System.out.println("deep : "+Arrays.toString(dCopy));
System.out.println();
data[0] = 5; //데이터 배열[0] 에 5를 넣었다.
System.out.println("Original : "+Arrays.toString(data));
System.out.println("shallow : "+Arrays.toString(sCopy));
System.out.println("deep : "+Arrays.toString(dCopy));
//맨마지막 결과값에서 data[0] = 5 를 받지 못했다.. 이유는 아래 deepCopy 메서드 때문~ 함보자
}
private static int[] deepCopy(int[] data) {
if(data==null) //
return null;
int[] result = new int[data.length];
System.arraycopy(data, 0, result, 0, data.length);
return result;
}
private static int[] shallowCopy(int[] data) {
return data;
}
}
------------------------------------------------------------------------------------------------
package ch11;
import java.util.Vector;
public class VectorEx1 {
public static void main(String[] args) {
Vector v = new Vector(5);
v.add("1");
v.add("2");
v.add("3");
print(v);
//메서드 총출동!!
v.trimToSize(); //빈공간을 없앤다...그러면 vector size는 3이 되겠네~
System.out.println("*자르기 한후 : trimToSize()");
print(v);
v.ensureCapacity(6);
//최소한의 용량이 6으로 새로운 인스턴스를 생성..이상이면 결과없음.. 현재는 3이므로 복사개념!
System.out.println("**최소 용량 제한 생성 : ensureCapacity()");
print(v);
v.setSize(7);
//size 자체를 7로 늘리는거임~ 이것도 새로운 인스턴스 생성인데..용량은 2배가 되는 효과가 있당!
System.out.println("*** 사이즈 변경 : setSize()");
print(v);
v.clear(); // vector 의 모든 요소를 삭제한다.
System.out.println("*** 요소를 모두 삭제 : clear()");
print(v);
}
private static void print(Vector v) {
System.out.println(v);
System.out.println("size : "+v.size());
System.out.println("capacity : "+v.capacity());
}
}
---------------------------------------------------------------------------------------------------
package ch11;
import java.util.*;
public class ArrayListLinkedListTest {
public static void main(String[] args)
{
ArrayList al = new ArrayList(1000000); //가변배열크기 1000000 설정
LinkedList ll = new LinkedList();
System.out.println("=순차적으로 추가하기=");
System.out.println("ArrayList :"+add1(al));
System.out.println("LinkedList :"+add1(ll));
System.out.println();
System.out.println("=중간에 추가하기=");
System.out.println("ArrayList :"+add2(al));
System.out.println("LinkedList :"+add2(ll));
System.out.println();
System.out.println("=중간에서 삭제하기=");
System.out.println("ArrayList :"+remove1(al));
System.out.println("LinkedList :"+remove1(ll));
System.out.println();
System.out.println("=순차적으로 삭제하기=");
System.out.println("ArrayList :"+remove2(al));
System.out.println("LinkedList :"+remove2(ll));
}
public static long add1(List list)
{
long start = System.currentTimeMillis(); //시작 : 현재시간을1/1000초
for (int i = 0; i < 100000; i++) list.add(i+""); //순차적으로 추가하기!
long end = System.currentTimeMillis(); // 끝 : 현재 시간을 1/1000초
return end - start;
}
public static long add2(List list)
{
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) list.add(500,"X"); //500번째에 "X"를 추가하기
long end = System.currentTimeMillis();
return end - start;
}
public static long remove1(List list)
{
long start = System.currentTimeMillis();
for (int i = list.size()-1; i > 0; i--) list.remove(i); //중간에서 삭제하기
long end = System.currentTimeMillis();
return end - start;
}
public static long remove2(List list)
{
long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) list.remove(i); //순차적으로 삭제하기
long end = System.currentTimeMillis();
return end - start;
}
}
----------------------------------------------------------------------------------------------------
package ch11;
import java.util.*;
public class ArrayListLinkedListTest2 {
public static void main(String[] args) {
ArrayList al = new ArrayList(1000000);
LinkedList ll = new LinkedList();
add(al);
add(ll);
System.out.println("==접근시간테스트==");
System.out.println("ArrayList :"+access(al));
// 이미 정해져 있기 때문에 n번째*데이터타입크기 로 한번에 접근이 가능하지만,
System.out.println("LinkedList :"+access(ll));
// LinkedList 같은 경우는 불연속적으로 처음부터 데이터가 연결된 것이기 때문에 순차적으로
//읽어서 접근하기 때문에 접근 시간이 길다~
}
public static void add(List list)
{
for (int i = 0; i < 100000; i++) list.add(i+"");
}
public static long access(List list)
{
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) list.get(i);
long end = System.currentTimeMillis();
return end - start;
}
}
'::::특별한 Java Story' 카테고리의 다른 글
Comparator 와 Comparable (0) | 2013.07.07 |
---|---|
Stack 과 Queue (0) | 2013.06.27 |
배열(Array) 연습문제 (0) | 2013.06.24 |
JSP_세팅 (0) | 2013.06.20 |
배열(Array) (0) | 2013.06.20 |