본문 바로가기
공부방/자바프로그래밍

List 구조 – ArrayList

by 오후 네시 2021. 8. 2.

- 최근에는 이것을 많이 쓴다. 벡터는 안 씀.

- 사용방법은 벡터와 비슷함.

- java.util.ArrayList를 import해야 함.

 

ArrayList 일반적인 예제

//ArrayList 생성

ArrayList<Object> list=new ArrayList<>();

//자료 추가

//사이즈(인덱스)는 자동으로 늘어남

list.add(“하나”);

list.add(2);

list.add(3.5);

list.add(false);

//3번 인덱스에 값(4) 추가

//그 뒤 자료는 자동적으로 한 칸씩 밀려남

list.add(3,4);

//삭제

list.remove(0)

//리스트.size() 데이터 개수

// 리스트.get(인덱스) 몇 번째 값

for(int i=0; I <list.size();i++){

  System.out.println(v.get(i));

}

- 자료형을 섞어 썼기 때문에 Object 타입을 썻음.

- Integer, String, Double, Long 등으로 써도 됨.

 

클래스를 ArrayList의 자료형으로 쓴 예제

- 클래스를 자료형으로 쓰면 클래스의 다양한 자료형의 멤버변수를 쓸 수 있다.

public class Member{

private String userid;

private String passwd;

private String name;

private String tel;

private String email;

//getter, setter 생략

}

public class ListMember{

public static void main(String[] args){

  ArrayList<Member> list=new ArrayList<>();

  //멤버 객체 생성

  Member m1=new Member();

  //데이터 입력

  m1.setName(“김철수”);

m1.setUserid(“kim”);

m1.setPasswd(“1234”);

m1.setTel(“02-999-8888”);

m1.setEmail(kim@gmail.com”);

//리스트에 멤버 추가

  list.add(m1);

//멤버 객체 생성

  Member m2=new Member();

  //데이터 입력

  m2.setName(“홍길동”);

m2.setUserid(“hong”);

m2.setPasswd(“2222”);

m2.setTel(“02-888-7777”);

m2.setEmail(hong@gmail.com”);

//리스트에 멤버 추가

  list.add(m2);

//멤버 객체 생성

  Member m3=new Member();

  //데이터 입력

  m3.setName(“조용필”);

m3.setUserid(“cho”);

m3.setPasswd(“3333”);

m3.setTel(“02-777-6666”);

m3.setEmail(cho@gmail.com”);

//리스트에 멤버 추가

  list.add(m3);

System.out.println(“이름\t아이디\t비번\t전화번호\t\t이메일”);

  for(int i=0; list.size(); i++){

    Member m=list.get(i);

    System.out.println(m.getName()+” \t” + m.getUserid()+” \t” +m.getPasswd()+” \t” +m.getTel()+” \t” +m.getEmail());

  } 

}

}

- List<Member> list=new ArrayList<>();

ArrayList의 부모클래스는 List이다.

따라서 위의 코드도 다형성 측면에서 가능하다.

실무에서는 위와 같은 코딩을 많이 한다.

이렇게 하면 벡터와 LinkedList도 처리가능하기 때문이다.

- List를 사용하려면 java.util.List를 import해야 함.

- 위의 예제처럼 ArrayList의 자료형에 클래스를 넣으면 다양한 형태의 자료형을 사용할 수 있다.

- 위 예제처럼 main에서 일일이 데이터를 입력하지 않고,

Member 클래스에 생성자를 만들어서 데이터를 입력하는 방법도 있다.

생성자 만드는 법

Member 클래스에서 우클릭> source > Generate Constructor using Fields... > 해당 멤버변수 선택 > generate

그러면 Member 클래스에 아래와 같은 생성자가 만들어진다.

public Member(String name,String userid, String passwd, String tel, String Email){

  this.name = name;

this.userid = userid;

this.passwd = passwd;

this.tel = tel;

this.email = email;

}

에러 방지를 위해 기본생성자도 만들어준다.

public Member(){};

그리고 main 메소드의 코딩내용을 아래와 같이 바꿔준다.

Member m4=new Member

여기까지만 적고 ctl + space해서 해당 생성자를 선택한다.

그리고 양식에 맞게 데이터를 입력하면 된다.

Member m4=new Member(“안해요”,“ahn”,“5678”,“02-666-5555”,ahn@gmail.com);

list.add(m4);

toString 메소드의 오버라이딩

- System.out.println 메소드는 valueOf 메소드를 호출하고 valueOf 메소드는 최종적으로 toString메소드를 호출하여 Object 타입의 자료형을 getClass().getName()@주소값(헥사코드) 형태로 반환한다.

이 toString 메소드를 Member 클래스에서 오버라이딩 해보자.

빈 공간 우클릭 > source > generate toString()

써야 할 멤버변수를 선택하고 generate

@Override

public String toString(){

  블라블라블라

}

- 이렇게 toString클래스를 활용하면 실무에서 큰 도움이 된다.

책 관리 예제는 동영상을 참조하세요!

Tip :

1. 향상된 for문

-JDK 1.5부터

for(개별값 : 집합값)

for(Member s : list)

-list객체의 값을 인덱스 0부터 차례차례 객체변수 s에 넣어서 반복문을 돌림.

2. java bean, DTO(데이터 전달 객체, Data Transfer Object), vo(Value Object), model class

- 위의 Member 클래스처럼 값을 저장하려는 목적으로 만든 클래스를 말함.

3. Scanner 클래스는 경고가 뜨더라도 close()를 하면 안된다.

  에러난다.

댓글