Jam's story

[컬렉션 프레임워크] -ArrayList 본문

Java

[컬렉션 프레임워크] -ArrayList

애플쩀 2022. 3. 24. 22:59
ArrayList 

순서유지, 
중복허용 
public class Ex14 {
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(4));
	
	ArrayList list2= new ArrayList(list1.subList(1, 4));
	print(list1, list2);
	
	Collections.sort(list1);
	Collections.sort(list2);
	print(list1, list2);
	
	
	System.out.println(list1.contains(list2));
	
	list2.add("b");
	list2.add("c");
	list2.add(3,"a");
	print(list1, list2);

	list2.set(3, "AA");
	print(list1,list2);
	
	System.out.println(list1.retainAll(list2));
	print(list1,list2);
	
	for (int i = list2.size()-1; i >=0; i--) {
		if(list2.contains(list1)) {
			list2.remove(i);
		}
	}
	
	print(list1,list2);
	

	
}

/**
 * @param list1
 * @param list2
 */
private static void print(ArrayList list1, ArrayList list2) {
	// TODO Auto-generated method stub
	System.out.println("list1"+list1);
	System.out.println("list2:"+list2);
}
}
값을 지울때는 뒤에서 부터한다. 
앞에서 부터 지우면, 각각의 요소들이 앞으로 자리이동을 하기 때문에 올바른 결과가 안나온다. 
public class Ex14 {
public static void main(String[] args) {
	final int LIMIT=10;
	String source="0123456789abcdefghigeuiruwoe";
	int length=source.length();
	ArrayList list=new ArrayList(length/LIMIT+10);
	for (int i = 0; i < length; i+=LIMIT) {
		if(i+LIMIT<length) {
			list.add(source.substring(i,i+LIMIT));
		}else {
			list.add(source.substring(i));
		}
	}
	for (int i = 0; i < list.size(); i++) {
		System.out.println(list.get(i));
	}
	
	
}//main
}//class

 

 

ArrayList는 약간 여유있는 크기로 크기를 지정하는 것이 좋다 .
저장한 크기보다 더 많은객체를 저장하면 자동적으로 늘어나긴 하나, 시간이 많이 소요 되기 때문
Vector 
public class Ex14 {
public static void main(String[] args) {

	Vector v=new Vector(5);
	v.add("1");
	v.add("2");
	v.add("3");
	
	v.trimToSize();
	print(v);
	
	
	v.ensureCapacity(10);
	print(v);
	
	v.setSize(7);
	print(v);
	
	v.clear();
	print(v);
}//main

/**
 * @param v
 */
private static void print(Vector v) {
	// TODO Auto-generated method stub
	System.out.println(v);
	System.out.println(v.size());
	System.out.println(v.capacity());
}
}//class
public class MyVector {
	Object[] data=null;
	int capacity=0;
	int size=0;
	public MyVector(int capacity) {
		if(capacity<0) {
			throw new IllegalArgumentException("유효하지 않은 값이다. "+capacity);
		}
		this.capacity=capacity;
		data=new Object[capacity];
	}
	public MyVector() {
		this(10);
	}
	public void ensureCapacity(int minCapacity) {
		if(minCapacity-data.length>0) {
			capacity=minCapacity;
		}
	}
	public boolean add(Object obj) {
		ensureCapacity(size+1);
		data[size++]=obj;
		return true;
	}
	public Object get(int index) {
		if(index<0 || index>=size) {
			throw new IndexOutOfBoundsException("범위를 벗언남");
		}
		return data[index];
	}
	public Object remove(int index) {
		Object oldObj=null;
		if(index<0 || index>=size) {
			throw new IndexOutOfBoundsException("범위를 벗어남 ");
		}
		oldObj=data[index];
		if(index!=size-1) {
			System.arraycopy(data, index+1, data, index, size-index-1);
		}
		data[size-1]=null;
		size--;
		return oldObj;
	}
	public boolean remove(Object obj) {
		for (int i = 0; i < size; i++) {
			if(obj.equals(data[i])) {
				remove(i);
				return true;
			}
			
		}
		return false;
	}
	
	public void trimToSize() {
		setCapacity(size);
	}
	/**
	 * @param size2
	 */
	private void setCapacity(int capacity) {
		// TODO Auto-generated method stub
		if(this.capacity==capacity) return ;
		Object[] tmp=new Object[capacity];
		System.arraycopy(data, 0, tmp, 0, size);
		data=tmp;
		this.capacity=capacity;
	}
	public void clear() {
		for (int i = 0; i <size; i++) {
			data[i]=null;
			
		}
		size=0;
	}
	public Object[] toArray() {
		Object[] result=new Object[size];
		System.arraycopy(data, 0, result, 0, size);
		return result;
	}
	public boolean isEmpty() {return size==0;}
	public int capacity() {return capacity;}
}//MyVector

 

System.arraycopy( 배열 a, 인덱스 A, 배열 b, 인덱스 B, 복사할 길이);
배열a[A]를 배열 b[B]에  복사할 길이만큼 복사하겠다는 것 

 

 

LinkedList

링크드리스트- > 단방향 ,다음요소에 접근하기 쉬움 이전요소에 접근 x
더블링크드리스트-> 양방향 ,  이전 ,다음요소에 접근하기 쉬움 
더블써큘러링크드 리스트 - > 원처럼 되어있는것 마지막요소랑 첫번째 요소가 이어져 있음 

 

순차적인 추가삭제 -> ArrayList
데이터 개수의 변경이 잦다면 -> LinkedList

'Java' 카테고리의 다른 글

26일차  (0) 2022.03.25
[컬렉션 프레임워크] - 스택 , 큐  (0) 2022.03.25
25일차  (0) 2022.03.24
24일차- 제네릭 프레임워크  (0) 2022.03.23
23일차- 날짜와 시간, 형식화  (0) 2022.03.22
Comments