본문 바로가기
🌈 백엔드/자료구조

자료구조_선형구조 ① 연접리스트 : 배열리스트 ArrayList

by 개발자 알마 2023. 2. 11.
반응형

 

 

 

[1] ArrayList 


(1) ArrayList 정의 

  • 배열의 단점을 보완하기 위해 java.util 패키지에서 제공해주는 클래스이다 

 

(2) ArrayList 선언하기 

 

ArrayList<Book> arr = new ArrayList<Book>();
        
ArrayList<integer> arr = new ArrayList<integer>();

ArrayList arr = new ArrayList();

 

[2] ArrayList 메서드


(1) add() 메서드 

  • boolean add( E e)
  • 요소 하나를 배열에 추가한다   
  • E :  요소의 자료형 
  • add(index , element) : 몇번 인덱스에 어떤 값을 추가한다 
        
        ArrayList a1 = new ArrayList();

        a1.add(1);
        a1.add("hi");
        a1.add(2);
        a1.add("안녕");
    
        a1.add(1,'5');
        System.out.println(a1);   ---->  [1 , 5 , hi , 2 , 안녕]

 

  • Book 클래스에서 속성을 가져오는 경우 
import java.util.ArrayList;
import 패키지.Book클래스;

public class Test {

	public static void main(String[] args) {

		ArrayList<Book> arr = new ArrayList<Book>();
		
		arr.add(new Book("책1", "작가1"));
		arr.add(new Book("책2", "작가2"));
		arr.add(new Book("책3", "작가3"));
		arr.add(new Book("책4", "작가4"));
		arr.add(new Book("책5", "작가5"));
		
		for(int i =0; i< arr.size(); i++) {
			library.get(i).showBookInfo();
		}
	}
}

 

(2) size() 메서드 

  • int size()
  • 배열에 추가된 요소의 전체 개수를 반환한다 
        
        ArrayList a1 = new ArrayList();

        a1.add(1);
        a1.add("hi");
        a1.add(2);
        a1.add("안녕");
        System.out.println(a1);  ----> [ 1 , hi , 2 , 안녕 ]

        System.out.println(a1.size());    ----> 4
        
        for(int i =0; i<library.size(); i++) {
			
        	System.out.println(a1[i]); 
		}

 

(3) get() 

  • E get(int index)
  • 배열의 index 위치에 있는 요소값을 반환한다
        ArrayList a1 = new ArrayList();

        a1.add(1);
        a1.add("hi");
        a1.add(2);
        a1.add("안녕");
        System.out.println(a1);  ----> [ 1 , hi , 2 , 안녕 ]
        
        
        System.out.println(a1.get(0));   ----> 1
        System.out.println(a1.get(3));    -----> 안녕

 

(4) remove()

  • E remove(int index)
  • 배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환한다
       
        ArrayList a1 = new ArrayList();

        a1.add(1);
        a1.add("hi");
        a1.add(2);
        a1.add("안녕");
        System.out.println(a1);  ----> [ 1 , hi , 2 , 안녕 ]


        // 리스트의 몇번째의 인덱스를 삭제하기 
        System.out.println(a1.remove(1));
        System.out.println(a1);         --------> [ 1 , 2 , 안녕 ]
        
	// 2를 값으로 가지고 있는 인덱스를 삭제하기
        System.out.println(a1.remove(Integer.valueOf(2)));  
        System.out.println(a1);   ------->  [ 1, 안녕 ]

 

(5) isEmpty()

  • boolean isEmpty()
  • 배열이 비어있는지 확인하기 

 

(6) set()

  • 변경하기

 

 

 

(7) clear() 

  • 인덱스 전체 삭제
       
        ArrayList a1 = new ArrayList();

        a1.add(1);
        a1.add("hi");
        a1.add(2);
        a1.add("안녕");
        System.out.println(a1);  ----> [ 1 , hi , 2 , 안녕 ]


        a1.clear();
        System.out.println(a1);   ----> []

 

(8) sort()

  • 리스트를 올림차순, 내림차순 정렬하라
        ArrayList a1 = new ArrayList();

        a1.add(3);
        a1.add(4);
        a1.add(6);
        a1.add(5);

	// 올림차순 정렬
        a1.sort(Comparator.naturalOrder());
        System.out.println(a1);   -----------> [ 3 ,4 ,5 ,6]

	// 내림차순 정렬
        a1.sort(Comparator.reverseOrder());
        System.out.println(a1);   -----------> [ 6 ,5 ,4 ,3 ]

 

 

 

(9) contains()

  • 리스트에 어떤 값이 있는 인덱스가 있으면 참 ,없으면 거짓
        ArrayList a1 = new ArrayList();

        a1.add(3);
        a1.add(4);
        a1.add(6);
        a1.add(5);


        System.out.println(a1.contains(1));   ----> false
        System.out.println(a1.contains(6));   ----> true

 

[3] ArrayList 활용 -1


1학번 학생A와 2학번 학생B, 두 학생이 있습니다. 
학생A은 국어와 수학 2과목을 수강했고, 학생B은 국어, 수학, 영어 3 과목을 수강하였습니다.
학생A은 국어 100점, 수학 50점입니다. 
학생B은 국어 70점, 수학 85점, 영어 100점입니다. 
Student와 Subject 클래스를 만들고 ArrayList를 활용하여 두 학생의 과목 성적과 총점을 출력하세요

 

  • Student 클래스 
import java.util.ArrayList;

public class Student {
	
    //멤버변수 
	int studentID;
	String studentName;
    
    //과목은 배열로 넣기위해 속성을 부여한다  
	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 s : subjectList){
			
			total += s.getScorePoint();
			System.out.println("학생 " + studentName + "의 " + s.getName() + " 과목 성적은 " + 
			        s.getScorePoint() + "입니다.");
		}
			
		System.out.println("학생 " + studentName + "의 총점은 " + total + " 입니다.");
	}
}
  • Subject 클래스 
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;
	}
}

 

public class Service {

	public static void main(String[] args) {
    
    	//인스턴스
		Student studentA = new Student(1, "학생A");
		
		studentA.addSubject("국어", 100);
		studentA.addSubject("수학", 50);
		
		Student studentB = new Student(2, "학생B");
		
		studentB.addSubject("국어", 70);
		studentB.addSubject("수학", 85);
		studentB.addSubject("영어", 100);
		
		studentA.showStudentInfo();
		System.out.println("======================================");
		studentB.showStudentInfo();
	}
}

 

[4] ArrayList 활용 -2


멤버쉽 관리하기 

Member 클래스를 만들고, 아이디와 이름을 멤버 변수로 선언

Member 클래스로 생성된 인스턴스들을 관리하는 클래스를 컬렉션 프레임워크 클래스들을 활용하여 구현한다.
  • 멤버 변수를 선언한다 
public class Member {
	
	private int memberId;        //회원 아이디
	private String memberName;   //회원 이름

	public Member(int memberId, String memberName){ //생성자
		this.memberId = memberId;
		this.memberName = memberName;
	}
	
	public int getMemberId() {  //
		return memberId;
	}
	public void setMemberId(int memberId) {
		this.memberId = memberId;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	
	@Override
	public String toString(){   //toString 메소드 오버로딩
		return memberName + " 회원님의 아이디는 " + memberId + "입니다";
	}
}
  • 멤버회원을 ArrayList 리스트에 담아서 추가 및 삭제 하여 관리한다 
public class MemberArrayList {

	private ArrayList<Member> arrayList;  // ArrayList 선언 

	public MemberArrayList(){
		arrayList = new ArrayList<Member>();  //멤버로 선언한 ArrayList 생성
	}
	
	public void addMember(Member member){  //ArrayList 에 멤버 추가
		arrayList.add(member);
	}
	
	public boolean removeMember(int memberId){  // 멤버 아이디를 매개변수로, 삭제 여부를 반환
		
		for(int i =0; i<arrayList.size(); i++){ // 해당 아이디를 가진 멤버를 ArrayList에서 찾음
			Member member = arrayList.get(i);
			int tempId = member.getMemberId();
			if(tempId == memberId){            // 멤버아이디가 매개변수와 일치하면 
				arrayList.remove(i);           // 해당 멤버를 삭제
				return true;                   // true 반환
			}
		}
		
		System.out.println(memberId + "가 존재하지 않습니다");  //for 가 끝날때 까지 return 이 안된경우
		return false;                   
	}
	
	public void showAllMember(){
		for(Member member : arrayList){
			System.out.println(member);
		}
		System.out.println();
	}
}
  • 수행 클래스 
public class MemberArrayListTest {

	public static void main(String[] args) {

		MemberArrayList memberArrayList = new MemberArrayList();
		
		Member memberLee = new Member(1001, "이순신");
		Member memberKim = new Member(1002, "김유신");
		Member memberKang = new Member(1003, "강감찬");
		Member memberHong = new Member(1004, "홍길동");
		
		memberArrayList.addMember(memberLee);
		memberArrayList.addMember(memberKim);
		memberArrayList.addMember(memberKang);
		memberArrayList.addMember(memberHong);
		
		memberArrayList.showAllMember();
		
		memberArrayList.removeMember(memberHong.getMemberId());
		memberArrayList.showAllMember();
	}
}

List 의 타입을 변환하라 


List<Character> 를 문자열로 변환하기 

List<Character> arr = new ArrayLIst<>(Arrays.asList( 'a' 'b' 'c' 'd' 'e');

StringBuilder sb = new StringBuilder();

for(Character ch : arr) {
sb.append(ch);

String answer = sb.toString();

 

 

 

 

ArrayList 를 이용하여 집합의 합집합/차집합/교집합 찾기 


집합의 껍대기를 ArrayList로 만든다 

 

ArrayList를 선언하여 Integer 타입을 가진 list 를 만들자 

import java.util.ArrayList;

class MySet {

	ArrayList<Integer>list;


}

 

 

ArrayList 에 데이터를 넣을수 있게 명령어를 넣는다 

 

MySet 클래스에 아까 선언한 ArrayList를 this로 지칭하고 

new ArrayList<>(); 하여 초기화를 시킨다 

 

 

for반복문으로  int 타입의 arr 정렬이 넣을거고  

this 이것의 list에는 item이란 데이터를 add 넣을것이다  

class MySet {

	ArrayList<Integer>list;
    
    
    MySet() {
    this.list = new ArrayList<Integer>();
    
	for(int[] arr){
    	this.list.add(item);
}

 

데이터를 넣자 ( 데이터 중복이 안되게 넣어야한다)

add 명령은 int 타입의  x 값을 넣을것이고 

this.list 그 리스트에 item을 넣어서 반복한다

 

ArrayList에 넣을 값은 item 이고 

item은 int x의 값이다 

굳이 이렇게 나눈 이유는 중복값을 찾기위해 다른 변수명을 사용하여 중복값을 찾는 역할을 한것같다 

 

만약에 item이 x의 주소값이 같다면 데이터가 중복이기 때문에 값을 넣지말고 return하고 

같지 않다면 this.list 그 리스트에 x의 값을 add 넣어라 

 

class MySet {

	ArrayList<Integer>list;
    
    
    MySet() {
    this.list = new ArrayList<Integer>();
    
	for(int[] arr){
    	this.list.add(item);
        
        
   public void add(int x) {
   	for(int item:this.list) {
    	if(item == x) {
        teturn;
        }
    }
    this.list.add(x);
        
}

 

반응형

댓글