1. 기초
package basic_html;
import java.util.ArrayList;
public class arr8 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>(); //<타입>
al.add("홍길동"); //배열에 값 추가
al.add("김유신");
al.add("유관순");
System.out.println(al); // 배열 출력
System.out.println(al.get(1)); // 배열의 값 출력
System.out.println(al.size()); // 클래스 배열의 길이 출력
al.remove(0); //배열의 값 삭제
System.out.println(al);
al.clear(); //배열 초기화
System.out.println(al);
//정수 형태의 빈 클래스 선언
//옛날버전
// ArrayList<Integer> al2 = new ArrayList<Integer>();
ArrayList<Integer> al2 = new ArrayList<>();
al2.add(10); //삽입시 10,20,30 이런거 안됨 다 따로써야함
al2.add(20);
al2.add(30);
al2.add(40);
System.out.println(al2.size());
System.out.println(al2);
ArrayList<Integer> al3 = (ArrayList)al2.clone(); //클래스 배열 복사
al3.add(100);
System.out.println(al3);
System.out.println(al3.size());
//자료형을 확인하는 방법
System.out.println(al3.get(0).getClass());
System.out.println(al3.get(0).getClass().getName());
//ArrayList<String> al4 = (ArrayList)al2.clone(); //다른 자료형으로 복사
//System.out.println(al4);
//System.out.println(al4.get(0)); //개수도 찍히고 리스트도 찍히는데 가져올수없음 자료형이 바뀌면서 고장남
}
}
- 선언 : ArrayList<자료형> 이름 = new ArrayList<>();
- add : 배열에 데이터 추가
- remove : 배열의 데이터 삭제
- size : 배열의 데이터 개수
- clear : 배열 초기화
- get : 배열의 데이터 값 출력
- 클래스 배열의 자료형 : String, integer, Double ... 클래스 형태의 자료형 사용
- int, double 이런거 안된다는 뜻
- clone() : 클래스 배열을 복사하는 메소드
2. 원시배열을 클래스 배열로 전환
package basic_html;
import java.util.ArrayList;
import java.util.Arrays;
public class arr9 {
public static void main(String[] args) {
//원시배열
Integer data[] = {10,20,30,40,50};
//클래스배열
ArrayList<Integer> all = new ArrayList<Integer>(Arrays.asList(data));
// System.out.println(all);
// System.out.println(all.get(3));
int f = 0;
for(f = 0;f<all.size();f++) {
// System.out.println(all.get(f));
}
Integer data2[] = {100,200,300};
all.addAll(Arrays.asList(data2)); //배열에 배열 붙이기
System.out.println(all);
new arr9_box().arrbox(); //응용문제
}
}
class arr9_box{
/*
응용문제
해당 원시배열을 클래스 배열로 변환 후 해당 데이터중 짝수의 데이터 값만 출력
*/
final Integer no[] = {15, 22, 16, 33, 42, 51, 50, 98, 94, 47, 32};
public void arrbox() {
ArrayList<Integer> nocl = new ArrayList<Integer>(Arrays.asList(this.no));
int i = 0;
while(i<nocl.size()) {
if(nocl.get(i)%2==0) {
System.out.println(nocl.get(i));
}
i++;
}
nocl.set(3, 1000);
System.out.println(nocl);
}
}
- Arrays.asList(원시배열변수이름) : 원시배열의 값을 복사
- addAll() : 추가 원시배열 데이터를 적용
- set(a,b) : 해당 클래스배열에 있는 값을 수정할때 (a번째 값을 b로 변경)
😊응용문제
사용자를 추가하는 코드를 작성
"사용자명을 입력하세요 : "
홍길동
"사용자명을 입력하세요 : "
이순신
"사용자명을 입력하세요 : "
강감찬
최대 5번 질문하여 다음과 같은 결과가 나오도록 하시오
["홍길동","이순신","강감찬","유관순","장보고"]
package basic_html;
public class arr10 {
public static void main(String[] args) {
new arr10_box().arrbox(); //원래 이렇게 쓰면 안대영! 이런건 배우지마!
}
}
class arr10_box{
Scanner sc = null;
ArrayList<String> nl = null;
String name = null;
public void arrbox() {
this.nl = new ArrayList<>();
this.sc = new Scanner(System.in);
int cnt = 5;
while(cnt>0) {
System.out.println("사용자명을 입력하세요(입력종료 1) : ");
this.name = this.sc.next();
if(this.name.equals("1")) {
break;
}else {
this.nl.add(this.name);
}
cnt--;
}
this.sc.close();
System.out.println(this.nl);
}
}
3. 데이터 할당 갯수 및 배열 정렬 방식
package basic_html;
public class arr10 {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<Integer>();
int f = 0;
for(f = 0;f<5518; f++) {
al.add(f);
}
System.out.println(al);
new arr10_box().aligns();
new arr10_box().aligns2();
}
}
class arr10_box{
ArrayList<String> nl = null;
ArrayList<Integer> al = null;
public void aligns() {
Integer number[] = {5,1,22,6,11,9,7};
this.al = new ArrayList<>(Arrays.asList(number));
System.out.println(this.al);
Collections.sort(this.al); //배열에 데이터가 오름차순으로 정렬 (클래스 배열)
System.out.println(this.al);
Collections.sort(this.al,Collections.reverseOrder()); //배열에 데이터가 내림차순으로 정렬 (클래스 배열)
System.out.println(this.al);
//문자열도 정렬 가능
String user[] = {"구나영","이가연","황재준","김수영","임민섭"};
this.nl = new ArrayList<>(Arrays.asList(user));
System.out.println(this.nl);
Collections.sort(this.nl);
System.out.println(this.nl);
}
public void aligns2() {
Integer number[] = {5,1,22,6,11,9,7};
Arrays.sort(number); //원시배열 오름차순 정렬
System.out.println(Arrays.toString(number));
Arrays.sort(number,Collections.reverseOrder()); //원시배열 내림차순 정렬
System.out.println(Arrays.toString(number));
}
}
- 클래스 배열의 최대값 5518 // 0~ 5517
- 클래스 배열 정렬
- 오름차순 : Collections.sort(클래스배열);
- 내림차순 : Collections.sort(클래스배열,Collections.reverseOrder());
- 원시 배열 정렬
- 오름차순 : Arrays.sort(원시배열);
- 내림차순 :Arrays.sort(원시배열,Collections.reverseOrder());
4. 2차 클래스 배열
생성
public static void main(String[] args) {
Integer a[][] = {
{10,20,30},
{100,200,300}
};
//빈 2차 클래스 배열
ArrayList<ArrayList<Integer>> al = new ArrayList<ArrayList<Integer>>(Arrays.asList());
//빈 1차 클래스 배열
ArrayList<Integer>al2 = new ArrayList<Integer>();
al2.add(10);
al2.add(20);
al2.add(30);
al.add(al2);
System.out.println(al);
int w = 0;
while(w<a.length) { //2
al2 = new ArrayList<Integer>();
int ww = 0;
while(ww<a[0].length) {
al2.add(a[w][ww]);
ww++;
}
al.add(al2);
w++;
}
System.out.println(al);
System.out.println(al.get(1).get(2)); //al[1][2]
}
- 2차 클래스 배열에 데이터 값을 적용해야 할 경우
- 1차 클래스 배열을 생성 후 데이터를 추가하여 2차 클래스 배열에 적용해야만 정상적으로 반영
- 1. 원시배열을 자료형 클래스로 변환
- 2. 1차 클래스 배열을 생성하여 데이터를 이관
- 3. 1차 클래스 배열을 2차 클래스 배열로 이관
- 4. 2차 클래스 배열 출력
😊응용문제
2차 원시배열 각각의 그룹 데이터중 짝수의 값만 그룹별로 2차 클래스배열에 적용
[[20,30],[8,44],[20]]
Integer datalist[][] = {
{15,20,25,30},
{8,11,31,44},
{17,41,39,20}
};
class arr11_box{
ArrayList<Integer> al = null;
ArrayList<ArrayList<Integer>> all = null;
Integer datalist[][] = {
{15,20,25,30},
{8,11,31,44},
{17,41,39,20}
};
public void arr11box() {
int w = 0;
this.all = new ArrayList<ArrayList<Integer>>();
while(w<this.datalist.length) {
this.al = new ArrayList<Integer>();
int ww = 0;
while(ww<this.datalist[0].length) {
if(this.datalist[w][ww]%2==0) {
this.al.add(this.datalist[w][ww]);
}
ww++;
}
this.all.add(this.al);
w++;
}
System.out.println(this.all);
}
}
5. 메소드를 활용해 2차 클래스 배열 데이터 만들기
package basic_html;
import java.util.ArrayList;
import java.util.Arrays;
public class arr12 {
public static void main(String[] args) {
Integer datalist[][] = {
{15,20,25,30},
{8,11,31,44},
{17,41,39,20}
};
arr12_box ab = new arr12_box(); //외부 클래스 로드
ArrayList<ArrayList<Integer>> all = new ArrayList<ArrayList<Integer>>();
int w = 0;
while(w < datalist.length) {
//abc라는 메소드에 원시 1차 배열값을 전송 후 1차 클래스 배열로 return 결과를 받음
ArrayList<Integer> data = ab.abc(datalist[w]);
all.add(data); //return받은 결과값을 2차 클래스 배열에 추가
w++;
}
System.out.println(all); //출력
}
}
class arr12_box{
public ArrayList<Integer> abc(Integer list[]){ //1차 클래스 배열 메소드
//1차 클래스 배열을 생성
ArrayList<Integer> al = new ArrayList<Integer>(Arrays.asList(list));
return al; //생성된 1차 클래스 배열값을 회신
}
public ArrayList<ArrayList<String>> bbb(){ //2차 클래스 메소드
return null;
}
}