국비교육 19일차 Java : Collection, ArrayList, LinkedList, HashMap
ArrayList<String> str_list = new ArrayList<String>();
- 출력시 저장된 순서대로 나온다.
- 중복된 데이터를 저장할 수 있다.
- 데이터를 읽어오는 속도는 ArrayList 가 LinkedList 보다 상대적으로 빠르다.
- 순차적으로 데이터를 추가/삭제하는 경우에는 ArrayList 가 LinkedList 보다 상대적으로 빠르다.
- 일반적인 데이터 추가/삭제는 데이터 중간 중간마다 발생하므로 이러한 경우에는 ArrayList 가 LinkedList 보다 상대적으로 느리다.
- 결과값은 ArrayList 를 사용하든지 LinkedList 를 사용하든지 동일한 결과값을 가진다.
- LinkedList 보다는 ArrayList 를 사용하도록 하자.
public class Example {
// field
String name1;
String name2;
// 기본 생성자
public Example() { }
// 파라미터가 있는 생성자
public Example(String name1, String name2) {
this.name1 = name1;
this.name2 = name2;
}
// method
public void name_info() {
System.out.println("1. 이름 : "+name1+"\n"
+ "2. 번호 : "+name2+"\n");
}
}
public static void main(String[] args) {
// 1. ArrayList 객체 exList
ArrayList<Example> exList = new ArrayList<>();
// 2. Example 클래스에 객체 생성하여 exList에 저장
exList.add(new Example("가_1","1"));
exList.add(new Example("나_1","2"));
exList.add(new Example("다_1","3"));
exList.add(new Example("라_1","4"));
// add는 list에 객체를 저장하여 준다.
// 3. exList에 저장되어진 정보 출력(Example 클래스의 name_info)
// 일반 for문
for(int i=0; i<exList.size(); i++) {
//size()는 list에 저장되어진 데이터의 수
exList.get(i).name_info();
// 리스트를 하나씩 get으로 가져오는데 괄호 안 i에는 index number
} // end of for
// 확장 for문
for(Example ex : exList) {
// 리스트 안에 들어온 수 만큼 자동적으로 반복
// 타입은 Example 타입
// exList.size() 만큼 반복한다.
ex.name_info();
} // end of for
//--------------------------------------//
// ArrayList 타입인 exList에 새로운 객체 추가시 특정 위치(index)에 추가하기
exList.add(new Example("마_1","5"));
// index 값을 지정하지 않으면 맨 뒤에 추가된다.
exList.add(2, new Example("나_2","6"));
// index 값을 지정하면 해당 index에 저장되며, 다른 list들은 뒤로 밀리게 된다.
for(Example ex : exList) {
ex.name_info();
} // end of for
/*
1. 이름 : 가_1
2. 번호 : 1
1. 이름 : 나_1
2. 번호 : 2
1. 이름 : 나_2 << 중간에 들어오게 된다.
2. 번호 : 6
1. 이름 : 다_1
2. 번호 : 3
1. 이름 : 라_1
2. 번호 : 4
1. 이름 : 마_1
2. 번호 : 5
*/
// ArrayList 타입인 exList에 저장된 객체 삭제하기
System.out.println("삭제 전 list.size : "+exList.size()); //6
exList.remove(5); // 마_1 삭제
System.out.println("삭제 후 list.size : "+exList.size()); //5
// 이름 앞글자에 '나'가 오는 경우 삭제하기
// 앞에서 부터 지우게 되면 지우지 못하는 목록이 발생해서 뒤부터 지워야 한다.
for(int i=exList.size()-1; i>=0; i--) {
if(exList.get(i).name1 != null && exList.get(i).name1.startsWith("나")) {
exList.remove(i);
}
}
for(Example ex : exList) {
ex.name_info();
} // end of for
/*
1. 이름 : 가_1
2. 번호 : 1
1. 이름 : 다_1
2. 번호 : 3
1. 이름 : 라_1
2. 번호 : 4
*/
} // end of main
- 출력시 저장된 순서대로 나온다.
- 중복된 데이터를 저장할 수 있다.
- 데이터를 읽어오는 속도는 LinkedList 가 ArrayList 보다 상대적으로 느리다.
- 순차적으로 데이터를 추가/삭제하는 경우에는 LinkedList 가 ArrayList 보다 상대적으로 느리다.
- 일반적인 데이터 추가/삭제는 데이터 중간 중간마다 발생하므로 이러한 경우에는 LinkedList 가 ArrayList 보다 상대적으로 빠르다.
- 결과값은 ArrayList 를 사용하든지 LinkedList 를 사용하든지 동일한 결과값을 가진다.
- LinkedList 보다는 ArrayList 를 사용하도록 하자.
- HashMap 과 HashTable 이 있다.
- Map 계열은 List 계열(Vector, ArrayList, LinkedList)처럼 index 가 사용되어 저장되는 것이 아니라,
- Map 계열은 key값과 value값을 쌍으로 사용하여 저장하는데 데이터 저장시 사용되는 메소드는 put(String key, Object value)메소드를 사용한다. 이때 key값은 반드시 고유한 값을 가져야 하고, value값은 중복된 값이 와도 괜찮다.
- key값이 중복으로 오게 되면 앞의 데이터가 덮어 씌워서 사라지게 된다.
- Map 계열에 저장된 key값들은 순서와는 상관없이 저장된다.
- Map 계열에 저장된 value값을 추출하려면 key를 이용해서 가져오는데 value 값의 추출은 get(String key) 메소드를 사용한다.
public static void main(String[] args) {
// 3개 다 사용가능
// HashMap<String, Example> exMap = new HashMap<String, Example>();
// HashMap<String, Example> exMap = new HashMap<>();
Map<String, Example> exMap = new HashMap<>();
exMap.put("가_1", new Example("가_1","1"));
exMap.put("나_1", new Example("나_1","2"));
exMap.put("다_1", new Example("다_1","3"));
exMap.put("라_1", new Example("라_1","1"));
exMap.put("마_1", new Example("마_1","4"));
// key 값을 "가_1", "나_1" 등으로 하여 key 값을 입력하면 해당 데이터를 뽑아올 수 있다.
// put(key, value) 사용하여 저장
// "다_1"을 찾아서 출력할 때.
String search_name = "다_1";
Example ex = exMap.get(search_name);
// get()으로 가져온다.
// Map은 index번호를 달고 저장된 것이 아니기 때문에
// for문을 사용하지 않아도 원하는 값을 바로 찾을 수 있다.
if(ex != null) {
ex.name_info();
} else {
System.out.println(">> 검색하신 "+search_name+"에 해당하는 항목이 없다. <<");
}
/*
1. 이름 : 다_1
2. 번호 : 3
*/
} // end of main