ABOUT ME

Today
Yesterday
Total
  • [JAVA]객체 배열, 배열 복사, 다차원 배열, arraylist
    Languages/Java 2021. 2. 22. 18:35
    반응형

    객체 배열 만들기

     

    참조자료형을 선언하는 객체 배열
    배열만 생성 한 경우 요소는 null로 초기화 된다
    각 요소를 new를 활용하여 생성하여 저장해야한다

     

    활용)BOOK이라는 변수 배열을 이용하여, 책 제목과 저서를 구현

     

    BOOK

     

    package array;
    
    public class Book {
    		private String bookName;
    		private String author;
    		
    		public Book() {}
    		public Book(String bookName, String author) {
    			this.bookName = bookName;
    			this.author = author;
    		}
    		public String getBookName() {
    			return bookName;
    		}
    		public void setBookName(String bookName) {
    			this.bookName = bookName;
    		}
    		public String getAuthor() {
    			return author;
    		}
    		public void setAuthor(String author) {
    			this.author = author;//매서드 구현을 위한 겟썸매서드 구현
    		}
    
    		public void showBookInfo() {
    			System.out.println(bookName + "," + author);//정보를 보여준다
    		}
    		
    }
    

     

    BOOKARRAY

     

    package array;
    
    public class BookArray {
    	
    	public static void main(String[] args) {
    		
    		Book[] library = new Book[5];//객체 배열의 예
    		
    		
    		
    		for(int i = 0; i<library.length; i++) {
    			System.out.println(library[i]);//책 5개를 만들 주소 5개를 만든것이다
    		}
    		
    		library[0] = new Book("태백산맥1","조정래");
    		library[1] = new Book("태백산맥2","조정래");
    		library[2] = new Book("태백산맥3","조정래");
    		library[3] = new Book("태백산맥4","조정래");
    		library[4] = new Book("태백산맥5","조정래");
    		
    		for(int i = 0; i<library.length; i++) {
    			System.out.println(library[i]);//주소값 확인
    		}
    			
    		for(int i = 0; i<library.length; i++) {
    				library[i].showBookInfo();//정보를 보여준다
    		}
    		
    	}
    
    }
    

     

    +덧 붙이는 설명

     

    BOOK이를 객체를 만들어 책 이름과 저서를 선언하여 get and setter 구현

    book생성자를 bookarray선언하여 함수 사용

    주소값을 for문을 이용하여 생성하고 초기화 후 정보를 보여준다.

     

     

    배열 복사하기

    기존 배열과 같은 배열을 만들어  배열이 꽉 찬 경우 더큰 배열을
    만들고 기존 배열 자료를 복사 할 수 있다.

    System.arrycopy(src(배열이름), srcPos(기존배열의 어느 위치), dest(어디에), destPos(복사배열의 어느 위치), length(몇개))

    이런 매서드를 사용하여 배열을 복사할수 있다


    복사의 유형에는 깊은복사와 얕은 복사가 있다

     

    얕은 복사

     

    package array;
    
    public class ObjectCopy {
    
    	public static void main(String[] args) {
    
    		Book[] bookArray1 = new Book[3];
    		Book[] bookArray2 = new Book[3];
    		
    		bookArray1[0] = new Book("태백산맥1","조정래");
    		bookArray1[1] = new Book("태백산맥2","조정래");
    		bookArray1[2] = new Book("태백산맥3","조정래");
    		
    		bookArray2[0] = new Book();
    		bookArray2[1] = new Book();
    		bookArray2[2] = new Book();
    			
    		System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
    		
    		for(int i= 0; i<bookArray1.length; i++) {	
    		bookArray1[i].showBookInfo();
    		}
    		System.out.println("===========");
    		for(int i= 0; i<bookArray2.length; i++) {	
    			bookArray2[i].showBookInfo();
    		}
    
    
    }
    

     

    깊은 복사

     

    package array;
    
    public class ObjectCopy {
    
    	public static void main(String[] args) {
    
    		Book[] bookArray1 = new Book[3];
    		Book[] bookArray2 = new Book[3];
    		
    		bookArray1[0] = new Book("태백산맥1","조정래");
    		bookArray1[1] = new Book("태백산맥2","조정래");
    		bookArray1[2] = new Book("태백산맥3","조정래");
    		
    		bookArray2[0] = new Book();
    		bookArray2[1] = new Book();
    		bookArray2[2] = new Book();
    		
    		
    		for(int i= 0; i<bookArray2.length; i++) {	
    		bookArray2[i].setAuthor(bookArray1[i].getAuthor());
    		bookArray2[i].setBookName(bookArray1[i].getBookName());//깊은복사
    		}
    		
    		bookArray1[0].setBookName("나목");
    		bookArray1[0].setAuthor("박완서");
    	}
    }
    

     

    java에서 많이 생성되는 for문

     

    package array;
    
    public class ObjectCopy {
    
    	public static void main(String[] args) {
    
    		String[] strArr = {"java","Android","c"};
    		
    		for(String s : strArr) {
    			System.out.println(s);
    		}
    		
    		int[] arr = {1,2,3,4,5};
    		for(int num : arr) { // num = arr[i]; 
    			System.out.println(num);
    		}
    	}
    
    }
    

     

     

    다차원배열

     

    2차원 이상의 배열

    지도,게임 등 평면이나 공간을 구현 할 때 많이 사용
    이차원 배열의 선언과 구조

    int[] [] arr = new int[2][3]; //2,3은 행과 열 6개의 방이 만들어진다

    선언과 초기화

    int [] [] arr = {{1,2,3},{4,5,6}};

    행을 기준으로 잡고 열을 돌린다
    이중 for문 사용

     

    package array;
    
    public class TomDimensionArray {
    
    	public static void main(String[] args) {
    
    		/*int [][] arr = new int[2][3];*/
    		
    		int[][] arr = {{1,2,3},{4,5,6}};
    		
    		System.out.println(arr.length);//행의 길이를 뜻한다
    		System.out.println(arr[0].length);//열의 길이를 뜻한다
    		
    		for(int i = 0; i < arr.length; i++) {
    			for(int j = 0; j < arr[i].length;j++) {
    				System.out.println(arr[i][j]); //0,0~1,2
    			}
    		}
    	}
    
    }
    

     

     

    arraylist

     

    기존 배열은 길이를 정하여 선언라므로 사용 중 부족한 경우 다른 배열로
    복사하는 코드를 직접 구현해야한다

    중간의 요소가 삭제되거나 삽입되는 경우도 나머지 요소에 대한 조정하는 코드를 구현 한다

    arratlist 클래스는 자바에서 제공되는 객체 배열이 구현된 클래스
    여러 매서드와 속성등 사용하는 객체 배열을 편리하게 관리할수 있다

    가장많이 사용하는 객체 배열 클래스

     

     

    arraylist 클래스 사용하기

     

    ArrayList<E> 배열이름 = new ArrayList<E>();
    사용할 객체를 E위치에 넣고 ArrayList 메서드를 활용하여
    추가하거나 참조 할 수 있다.

     

    활용)

    배열프로그램
    학생이 여러과목의 수업
    성적에 대한 총점

     

    +덧 붙이는 설명

     

    성적에 대한 총점을 확인하려면 총 세개의 클래스가 필요하다

    학생,과목,test

    성적에 대한 get and setter 구현 후

    값을 넣어 프로그래밍한다.

     

    student

     

    package array;
    
    import java.util.ArrayList;
    
    public class Student {
    	
    	private int studentID;
    	private String studentName;
    	private ArrayList<Subject> subjectList;
    	
    	public Student(int studentID, String studentName) {
    		this.studentID = studentID;
    		this.studentName = studentName;
    		
    		subjectList = new ArrayList<Subject>();
    		
    	}
    	
    	public void addSubject(String name,int score) {
    		Subject subject = new Subject();
    		subject.setName(name);
    		subject.setScorePoint(score);
    		
    		subjectList.add(subject);
    	}
    	
    	public void showStudentInfo() {
    		
    		int total = 0;
    		for(Subject subject : subjectList) {
    			total += subject.getScorePoint();
    			System.out.println("학생" + studentName + "님의" + subject.getName()
    			+ "과목의 성적은" + subject.getScorePoint() + "점 입니다");
    		}
    		System.out.println("학생" + studentName + "님의 총점은" + total + 
    				"점 입니다.");
    	}
    	
    
    }
    

     

    subject

     

    package array;
    
    public class Subject {
    	
    	private String name;
    	private int scorePoint;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getScorePoint() {
    		return scorePoint;
    	}
    	public void setScorePoint(int scorePoint) {
    		this.scorePoint = scorePoint;
    	}
    
    }
    

     

     

    subjectTest

     

    package array;
    
    public class StudentTest {
    
    	public static void main(String[] args) {
    
    		Student studentLee = new Student(1001, "Lee");
    		studentLee.addSubject("국어",100);
    		studentLee.addSubject("수학",90);
    		
    		studentLee.showStudentInfo();
    		
    		
    		Student studentKim = new Student(1002, "Kim");
    		studentKim.addSubject("국어",90);
    		studentKim.addSubject("수학",80);
    		studentKim.addSubject("영어",100);
    		
    		studentKim.showStudentInfo();
    		
    	}
    
    }
    

     

     

    프로그래밍

     

     

     

    반응형

    댓글

Designed by Tistory.