5월 11일 내용정리
1.배열과 컬렉션은 자료구조의 하나로 같은 타입(동일한타입)만 묶는다.
배열은 new연산자를 생성을 할때 배열의 크기가 만들어짐.생성 후 크기를 변경할 수 없다.
예)int[]iarray=new int[3];
배열은 new연산자로 크기를 지정해야 하고 나중에 크기를 늘릴 수 없다.
2.컬렉션:같은타입을 묶어서 관리하는 자료구조, 저장 공간의 크기를 동적으로 관리한다.(삽입하고 삭제 하는게 자유롭다.)
Arraylist arr =new Arraylist<>();
Arraylist.add("내용") 추가한다.
Arraylist.remove("내용") 삭제한다.
3.프레임워크:클래스와 인터페이스의 모임(라이브러리)
import 로 불러와 쓰는 API와 같은것을 말함.
클래스를 정의할때 설계의 원칙 또는 구조가 있는 것
4.컬렉션 프레임워크:자료구조에 정렬, 탐색 등의 알고리즘을 구조화해 놓은 프레임 워크다.
5.list 인터페이스안에는 Arraylist, LinkedList,Vector 가 포함되어 있음
6.list의 특징
(1)순서가 있다.
(2)일렬로 늘어놓는 구조
(3)인덱스로 관리
(4)저장공간의 크기를 동적으로 관리
(5)동일한 타입을 묶어서 관리
(6)객체를 저장하면 자동인덱스가 부여되고, 객체를 검색,삭제할 수 있는 기능제공
7.Arraylist와 Vector는 거의 쓰는방법이 동일하나, 쓰레드(작업방법,속도)차이가 있다.
8.Arraylist와 Vector는 검색이 주가 될때 유용하다.
왜? 검색을 하면 이미 인덱스가 부여되어 있어 빠르다.
그러나 삽입/삭제는 오래걸림
삽입/삭제할때 빈공간을 만들거나 빈공간을 없앨때
삽입/삭제 하는 인덱스 기준으로 뒤로 차근히 미루거나 앞으로 차근히 당겨주기 때문에 시간이 오래 걸림
9.LinkedList는 삽입삭제가 주가될때 유용하다.
LinkedList열차 처럼 좌우 연결이 있어서 뭔가를 삽입하고 싶으면 좌우 연결을 끊고 새로삽입하는 데이터와 다시 연결만 하면 되서 시간이 짧음
그러나 검색을 할때 번호를 다시 부여하여 검색을 하기 때문에 검색시는 오래걸린다.
10.Arraylist는 단일쓰레드((단일작업)->작업하나끝나면 그다음거 시작)일때 사용하는게 좋고,
Vector는 멀티쓰레드(->작업하면서 동시에 다른작업 시작)일때 사용하는게 좋다.
11.모든 컬렉션(List,Set,Map...) 객체는 자신의 데이터를 모두 출력하도록 toString을 오버라이딩 되어 있음
보통은 객체를 생성할때 toString을 사용하고 싶으면 재정의하고,해쉬코드도 같이 재정의해야 toString으로 내용출력가능
package study_0511;
import java.util.*;
public class CollectionPractice {
public static void main(String[] args) {
//배열
String[]array=new String[] {"가","나","다","라"};
//배열의 내용을 지울때, 공간삭제는 안되고, 내용이 인덱스 2번자리에 null로 채워진다.
array[2]=null; //배열은 공간을 미리확보하고, 만듬
System.out.println(array.length); //배열크기
System.out.println(Arrays.toString(array)); //배열 보기
for(int i=0; i<array.length;i++) { //for문 통해서 배열보기
System.out.println("배열:"+array[i]);
}
array[2]="이자바"; //배열내용변경
//list
//List<E>참조변수 = new ArrayList<E>();->();는 생성자
//ArrayList<E>참조변수 = new ArrayList<E>();->();는 생성자
List<String> arrList=new ArrayList<String>(); // 뒤에 있는 <String> 는 유추가 가능하면 삭제가능
arrList.add("가"); //list 내용 추가하기
arrList.add("나"); //list 내용 추가하기
arrList.add("다"); //list 내용 추가하기
arrList.add("라"); //list 내용 추가하기
System.out.println(arrList.size()); //list 크기보기
System.out.println(arrList);//list 내용보기
arrList.remove(1); //list 인덱스 삭제하기
arrList.remove("가"); //list 내용으로 삭제하기
System.out.println(arrList);
System.out.println(arrList.get(0)); //인덱스가져오기
for(int i=0; i<arrList.size();i++) { //arrList에서는 배열의 크기를 확인할때 arrList.size
System.out.println("arrList:"+arrList.get(i));
}
arrList.set(0,"김자바");
arrList.set(3,"라라랄");
System.out.println(arrList);
}
}
12.List 컬렉션
(1)기본 생성자의 경우 10개의 초기용량(메모리공간) 확보,
(2)컬렉션 객체 10개를 저장할수 있는 초기공간을 말함
(3)데이터(원소)가 많아지면 저장공간을 자동 추가
(4)처음부터 초기용량 설정가능
(5)참고로 LinkedList 는 초기용량 설정 불가능
13.List arrList=new ArrayList<>(); 초기용량10개 배정
List arrList=new ArrayList<>(30); 초기용량30개 배정
List interface의 구현 클래스 생성자로 동적컬렉션 생성 (동적-데이터의 추가, 삭제가 가능)
List변수=new ArrayList();
List변수=new Vector();
List변수=new LinkedList();
ArrayList변수=new ArrayList();
Vector변수=new Vector();
LinkedList변수=LinkedList();
14.정적인 컬렉션 생성
정적-데이터의 추가(add), 삭제가 불가능(remove) 단, 변경(set)은 가능하다.
고정된 데이터를 저장하고 활용할때 쓴다.
15.List변수= Arrays.asList(데이터들);->안에 들어갈 데이터는 반드시 제네릭 타입이어야한다.
Listlist = Arrays.asList("홍","김","박");
Listlist = Arrays.asList(1,2,3,4);
제네릭 타입은 주소(참조)를 담기 때문에 랩퍼클래스를 쓴다.
Listlist = Arrays.asList(T...a); 가변배열로 얼마든지 T타입으로 받을수 있다.
16.Vector는 동기화(잠금기능)이 되어 있어서 멀티쓰레드 환경에서 쓴다.
Vector는 키값이 있어야 프로그램이 시작되기 때문에 다른 프로그램에서 키를 가져다가 쓰고 있으면 작동이 안됨.
package study_0511;
import java.util.*;
public class LTest {
public static void main(String[] args) {
List<String>list = new Vector<>();
list.add("김빛나");
list.add("박자바");
list.add("자양이");
System.out.println(list.size()); //배열 사이즈 보기
System.out.println(list); //배열 내용 보기
list.remove(1); //배열 삭제
list.remove("가"); //배열 삭제
System.out.println(list.get(0)); //배열 인덱스로 가져오기
list.set(0,"김자바"); //배열 수정
list.clear(); //배열 전체 삭제
//정적이라 초기배열만들때 몇만개라도 넣어줘도 되지만 만들어지면 추가,삭제는 안된다.
List<String>alist =Arrays.asList("홍길동","김자바","이순신");
// alist.add("추가"); 정적이라 추가안됨
// alist.remove("삭제"); 정적이라 삭제안됨
alist.set(0,"수정"); //수정은 가능하다.
}
}
============================================================
public class LTest_01 {
public static void main(String[] args) {
//toArray()=>반환형 Object로 반환,강제 형변환 필요
List<Integer> iList= new ArrayList<>();
//toArray(T[] t)
//배열공간을 미리지정,배열공간을 0으로 처리하면 들어오는 것을 모두받는것
Integer[] iarr=iList.toArray(new Integer[10]);
Collection<String> list =Arrays.asList("다람쥐","개구리","나비");
Iterator<String> iter =list.iterator();
while(iter.hasNext())
System.out.println(iter.next()+"-");
}
}