[Java] ArrayList,Scanner

*List

 - 일차원 배열 처럼 생성

 - 검색의 기능이 있으며, 중복 데이터를 저장할 수 있다.

 - 입력되는 값은 순차적으로 입력되고, 순차적으로 나온다. ( FIFO : First Input First Output)

 - ArrayList, LinkedList, Vector 존재.

 - 가변길이형

*Set

- 일차원 배열 처럼 생성

-검색의 기능이 없으며(Iterator)를 사용하여 검색
, 중복 데이터를 저장하지 않는다.
-입력되는 값은 순차적으로 입력되지 않는다.
-HashSet존재
-가변길이 형
-

*Map

-이차원 배열 처럼 생성
-키와 값의 쌍으로 이루어진 데이터형 ( KVP : Key Value Pair )
-키를 사용하여 값을 조회하는 자료구조. ( 모든 방의 값을 꺼내지 않는다. )
-키는 중복되지 않고, 값은 중복 될 수 있다.
-같은 키가 입력되면, 이전 키에 값을 덮어쓴다.
-입력되는 값은 순차적으로 입력되지 않는다.
-HashMap, Hashtable 이존재

 

*ArrayList : multi-thread에서 동시 접근 가능. (동기화x) => 속도 빠름.

*Vector : multi-thread에서 동시 접근 불가능. (동기화) => 속도느림.

*LinkedList : 데이터를 기존 데이터 사이에 추가하는 일이 빈번할 때.

사용법)

1.생성)

   Generic을 사용하지 않는 경우 : 모든 값을 추가 할 수 있다.

   -방마다 다른 값이 저장될 수 있다. => 입력은 편하지만 값을 꺼낼 때 에러가 발생할 수 있다.

   -모든 JDK버전에서  사용할 수 있다. (권장하지 않는다. )

    List l=new ArrayList();

 2. 값 할당)

    l.add( 2025 );

    l.add(2);

    l.add(“안녕하세요?”);

3. 리스트 크기)

    l.size();

 4.리스트 방에 값 얻기) – error 발생

   l.get( 인덱스 )

 

*generic을 사용하는 경우 : 지정한 값만 추가할 수 있다.

  -is a관계

  List<데이터형> 객체명=new ArrayList<데이터형>();

(Generic에 사용할 데이터 형은 참조형 데이터형 만 가능 int => Integer 사용)

  -자식클래스

  ArrayList <데이터형> 객체명=new ArrayList<데이터형>();

  ArrayList <데이터형> 객체명=new ArrayList<>();

(생성하는 쪽의 Generic은 생략가능)

 

사용법)

1.생성)

 List<String> list=new ArrayList<String>();

2. 값 할당) –가변길이

  list.add(“안녕”);

  list.add(“하세요?”);

  list.add(“Java”);

 3. 리스트의 값을 배열로 복사.

  *주의 : generic을 사용하지 않은 List의 값은 배열로 복사될 수 없다.

   1. generic과 동일한 데이터형으로 배열 생성.

     String[] arr=new String[ list.size() ];

   2. list의 값을 배열로 복사

     list.toArray( 복사할배열 );

 4.리스트 의 방의 크기

    list.size();

 

package day0212;

 

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

import java.util.Vector;

 

/**

* List 사용<br>

* -가변 길이형<br>

* -값은 순차적으로 입력되고, 순차적으로 출력된다.<br>

* -검색의 기능이 있으며, 값은 중복될 수 있다.

*/

public class UseList {

 

@SuppressWarnings({ "rawtypes", "unchecked" })

public void notUsingGeneric() {

List list = new ArrayList();

list.add(2025);

list.add("안녕하세요?");

list.add(12);

 

System.out.println("=== notUsingGeneric() ===");

System.out.println(list.get(0) + " " + list.get(1) + " " + list.get(2));

}

 

public void useArrayList() {

List<String> list = new ArrayList<String>();

list.add("안녕하세요?");

list.add("오늘은");

list.add("수요일");

list.add("입니다.");

list.add("수요일");

list.add("눈그쳤음.");

 

List<Integer> list2 = new ArrayList<Integer>();

list2.add(2025);

list2.add(2);

list2.add(2026);

list2.add(3000);

 

System.out.println("=== useArrayList() ===");

for (String temp : list) {

System.out.println(temp);

}

 

for (int j : list2) {

System.out.println(j);

}

 

list.remove("수요일");

list.clear();

 

System.out.println("list size : " + list.size());

}

 

public void useList2() {

List<String> list1 = new LinkedList<String>();

list1.add("자바");

list1.add("JSP");

list1.add("Spring");

 

List<String> list2 = new Vector<String>();

list2.add("파이썬");

list2.add("장고");

list2.add("텐서플로우");

 

System.out.println("=== useList2() ===");

System.out.println("LinkedList 출력");

for (String str : list1) {

System.out.println(str);

}

 

System.out.println("Vector 출력");

for (String str : list2) {

System.out.println(str);

}

}

 

public static void main(String[] args) {

UseList ul = new UseList();

ul.notUsingGeneric();

ul.useArrayList();

ul.useList2();

}

}

콘솔 출력

=== notUsingGeneric() ===

2025 안녕하세요? 12

=== useArrayList() ===

안녕하세요?

오늘은

수요일

입니다.

수요일

눈그쳤음.

2025

2

2026

3000

list size : 0

=== useList2() ===

LinkedList 출력

자바

JSP

Spring

Vector 출력

파이썬

장고

텐서플로우

 

package day0212;

 

import java.util.Scanner;

 

public class UseScanner {

 

public UseScanner() {

//콘솔에 입력되는 키보드값 받기.

Scanner scan=new Scanner(System.in);

System.out.println("아무 문자열이나 입력하고 엔터");

//next() 이벤트가 발생하기 전까지 멈춰있다가, 이벤트가 발생하면 계속 동작을이어나는 일.

//코드의 실행을 멈추는 blocking method

// String temp=scan.next();

String temp=scan.nextLine();

System.out.println("입력 값 : "+ temp );

 

System.out.println("당신의 나이를 입력");

int age=scan.nextInt();

System.out.println("당신의 나이는 : "+ age);

 

System.out.println("당신의 태어난 해를 입력");

int birth=scan.nextInt();

System.out.println("당신의 태어난해 : "+ birth);

 

scan.nextLine(); //숫자를 입력받은 후 입력 버퍼를 비우고

 

System.out.println("당신의 거주지를 입력");

String addr=scan.nextLine();//문자열을 입력 받는다.

System.out.println("입력한 주소는 : "+ addr);

 

scan.close();

}

 

public static void main(String[] args) {

new UseScanner();

}//main

 

}//class

콘솔 출력 및 값 입력

아무 문자열이나 입력하고 엔터

문자문자

입력 값 : 문자문자

당신의 나이를 입력

25

당신의 나이는 : 25

당신의 태어난 해를 입력

2000

당신의 태어난해 : 2000

당신의 거주지를 입력

경기

입력한 주소는 : 경기