Jam's story
[컬렉션 프레임워크] -ArrayList 본문
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