1. List 

- java.util 패키지에 존재

- 일차원 배열처럼 생성됨

- 값은 중복되며, 검색의 기능이 있음

- 객체를 저장하므로 기본형 데이터형을 저장할 수 없음.

   > 기본형 데이터형은 Wrapper class를 사용하여 객체로 만든 후 저장됨 (=autoboxing)

 

- List사용법) List list = new ArryList();  // is a 관계 객체화

   > JDK1.4까지 : 모든 객체를 저장할 수 있음

                     : 장점) 편의성-모든 값을 저장할 수 있음 / 단점) 값을 꺼내 사용할 때 문제

   > JDK1.5이후 : 특정 객체만 저장할 수 있음 (<E> : Generic)

1) 생성 : ArrayList al = new ArrayList();

2) 값 추가 : 모든 객체를 다 할당할 수 있음

                //값을 추가할 때마다 Element가 증가함

                  al.add(“안녕”); , al.add(new Integer(10));, al.add(new 클래스명(매개변수))

 

 2. Generic 

- JDK1.5에서부터 추가된 기능

- JCF(Java Collection Framework)의 입력 데이터형 제한

- Generic이 사용된 JCF는 설정된 데이터형만 입력가능해짐 (모든 데이터형>특정 데이터형 입력)

- <E>는 Element의 약자, List의 방 데이터형을 설정하는 것으로 하나만 입력 가능

- 기본형 => Wrapper Class 사용

- 사용법) List<E> list = new ArrayList<E> ();

             Ex. 문자열만 저장가능한 List 생성 : List<String> list = new ArrayList<String>();

                  기본형은 Wrapper Class 사용 : List<Integer> list = new ArrayList<Integer>();

                   VO => 방 하나에 여러 개의 값 저장 시 : List<VO> List = new ArrayList<VO>();


# 오늘의 코딩 #

ArrayList를 활용해보자! (중복값 가능, 검색 기능 있음)

package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

/**
 * ArrayList 활용 Class
 * @author user
 */
public class UseArrayList {
	/**
	 * 10~20 사이의 난수를 발생시켜, 이름 배열의 임의의 방 값을 얻어 List넣고 반환하는 method<br>
	 * @return 발생된 난수 횟수만큼 임의의 값이 저장된 list
	 */
	public List<String> randomName() {
		List<String> list = new ArrayList<String>();
       
		String[] data = "셔누,형원,주헌,민혁,기현,창균,동동".split(",");
		
		Random random = new Random();
		int num = (random.nextInt(11) + 10); // 10~20까지의 난수 발생

		for (int i = 0; i < num; i++) { // 난수 횟수만큼 list에 값 할당하는 for
			list.add(data[random.nextInt(data.length)]); // 할당되는 값도 random
		} // end for

		return list;
	} // randomName

	/**
	 * randomName method에서 반환된 list를 개선된 for로 출력하는 method
	 */
	public void printRandomName() {
		List<String> nameList = randomName(); // 위 method에서 반환된 list를 nameList에 할당
		
		System.out.println("추출횟수 : " + nameList.size()+"회");
		for (String val : nameList) {
			System.out.print(val + " ");
		} // end for
	}// printRandomName
	
	public static void main(String[] args) {
    
		UseArrayList ul = new UseArrayList();
		ul.printRandomName();

	}// main
}// class

 

 

# 출력 결과 #

추출횟수 : 12회
동동 셔누 동동 형원 동동 기현 민혁 창균 창균 창균 주헌 기현

 

 

'Development > Java' 카테고리의 다른 글

[Java] Stack / autoboxing / unboxing  (0) 2021.08.12
[Java] JCF - Set, Map  (0) 2021.08.11
[Java] JCF - List, Set, Map  (0) 2021.08.09
[Java] DecimalFormat Class  (0) 2021.08.06
[Java] import / static import  (0) 2021.08.05

 StringTokenizer 

- java.util 패키지에서 제공 (import해야 사용 가능함)

- 문자열을 짧은 한 마디(token)로 구분할 때 사용

- StringTokenizer는 값을 가지지 않음

   > 값은 외부에 존재하고 그 제어권만 가지는 것

   > pointer를 사용함 (한 방향으로만 진행)

 

** 다양한 생성자

1) StringTokenizer(String str)

    - 입력되는 문자열의 공백(white space)로 토큰 생성

2) StringTokenizer(String str, String delim)

    - 입력되는 문자열을 기준문자열로 토큰 생성

    - 기준 문자열을 사용하여 토큰을 구분하는 생성자

3) StringTokenizer(String str, String delim, boolean returnDelims) 

    - 2)와 동일하나, 기준문자열을 토큰으로 취급할 것인지 결정하는 3번째 매개변수가 있음

 

** 자주 쓰이는 method

- countTokens() : 현재 남은 토큰의 개수

- hasMoreTokens() : 토큰 존재 여부 반환   // true or false 

- nextToken() : 토큰을 얻고 포인터를 다음 토큰으로 이동시킴

- 위 method 들을 활용한 while 문이 자주 사용됨 

  > 형식 : while ( 객체명.hasMoreTokens() ) {

                       ... 객체명.nextToken(); ... }


# 오늘의 코딩 #

- StringTokenizer를 활용해보자

 

package test;

import java.util.StringTokenizer;

public class UseStringTokenizer {

	/**
	 * 문자열 데이터를 기준 문자열로 구분한 후 배열에 넣고 반환하는 method<br>
	 * @return 구분된 문자열
	 */
	public String[] separateData() {
		String data = "짜장면,탕수육,짬뽕,볶음밥,팔보채,크림새우,깐풍기";
		StringTokenizer str = new StringTokenizer(data, ","); // ,로 문자열 나누기

		String[] dataArr = new String[str.countTokens()]; // token 수 만큼 배열 생성

		int i = 0;
		while (str.hasMoreTokens()) { // token을 배열에 할당하기 위한 while
			dataArr[i] = str.nextToken(); // 배열[0]부터 token값 넣기
			i++; // 배열 방을 바꿀 증감식
		} // end while

		return dataArr;
	}// separateData

	/**
	 * 제시된 이름 데이터에서 매개변수로 입력되는 "성"에 해당하는 이름이 몇 개인지 반환하는 method<br>
	 * 
	 * @param lastName 매개변수로 입력되는 성
	 * @return 같은 성에 해당하는 이름 수
	 */
	public int findLastName(String lastName) {
		int sameNum = 0; // 같은 성을 가진 이름의 개수를 저장할 변수

		String data = "김가가,김나나,김다다,박가가,박나나,박다다,이다다,삼다다,안다다,하가가";
		StringTokenizer str = new StringTokenizer(data, ",");

		String[] nameArr = new String[str.countTokens()]; // token 수 만큼 배열 생성

		int i = 0;
		while (str.hasMoreTokens()) { // token을 배열에 할당하는 while
			nameArr[i] = str.nextToken();
			if (nameArr[i].startsWith(lastName)) { // 같은 성을 가졌으면 sameNum의 수가 하나씩 더해짐
				sameNum++;
			} // end if
		} // end while

		return sameNum;
	}// findLastName

	public static void main(String[] args) {

		UseStringTokenizer st = UseStringTokenizer();
		
        // separateData() method 사용
		String[] dataArr = st.separateData(); // 다른 method에서 return한 배열을 할당
		for (String s : dataArr) { // 배열 출력
			System.out.printf("%-5s", s);
		} // end for
		
        // findLastName() method 사용
		String lastName = "박";
		System.out.println("\n" + st.findLastName(lastName));

	}// main

}// class

- 둘다 문자열을 token으로 자른 후 배열에 잘 저장만 한다면 사용하기에 무리는 없었다. 

- method 사용에 익숙해지면 좋을듯!

 

# 출력 결과 #

짜장면
탕수육
짬뽕
볶음밥
팔보채
크림새우
깐풍기

3

 

 

+ Recent posts