'ArrayList'에 해당되는 글 1건

  1. 2013.06.26 ArrayList / Vector / LinkedList

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
Posted by 옆모습오빠
: