Notice
Recent Posts
Recent Comments
Link
Everything has an expiration date
165 - Java 컬렉션(Collection) : 비동기화 스레드 ArrayList의 활용. addAll() 메소드, List 하위 클래스 본문
[Java]/Program source (java)
165 - Java 컬렉션(Collection) : 비동기화 스레드 ArrayList의 활용. addAll() 메소드, List 하위 클래스
Jelly-fish 2023. 9. 22. 17:49/* ====================================
■■■ 컬렉션 (Collection) ■■■
======================================*/
// List → Vector, ArrayList, LinkedList, ...
// ·순서 있음
// ·배열과 유사
// ·중복 허용
/*
(동기화를 지원하지 않는다. 비동기화 클래스이다. → 이 점만 Vector와 다르다.)
(멀티 스레드 safe하게 사용해야 한다 → Vector, 그렇지 않으면 ArrayList)
○ ArrayList 클래스
- ArrayList 와 Vector 클래스는
List 를 크기 변경이 가능한 배열로 구성한 것으로
차이점은 Vector 클래스의 객체는 기본적으로 동기화 되지만,
ArrayList 는 그렇지 않다는 점이다.
- 비동기화 컬렉션은 동기화된 컬렉션보다 더 나은 성능을 제공하며
스레드들이 컬렉션을 공유할 필요가 없는 프로그램에서는
일반적으로 ArrayList 를 Vector 보다 더 선호하며,
ArrayList 는 동기화를 고려하지 않은 Vector 처럼 동작함으로써
스레드 동기화에 따르는 부담을 가지지 않기 때문에
Vector 보다 더 빠르게 실행된다.
- null 을 포함한 모든 요소를 허용하며
List 인터페이스를 구현하는 것 외에 리스트에 격납하기 위해
내부적으로 사용되는 배열의 사이즈를 조작하는 메소드를 제공한다.
*/
// List, Set, Map → 인터페이스 이므로 자료구조 생성 불가.
import java.util.ListIterator;
import java.util.ArrayList;
import java.util.Vector;
import java.util.List;
public class Test165
{
public static void main(String[] args)
{
// ArrayList 자료구조 생성
//ArrayList<String> list = new ArrayList<String>();
//List<String> list = new List<String>();
//Vector<String> list = new Vector<String>();
//List<String> list = new Vector<String>();
List<String> list1 = new ArrayList<String>();
// list1 자료구조에 요소 추가 → add()
list1.add("오펜하이머");
list1.add("엘리멘탈");
list1.add("알라딘");
List<String> list2 = new ArrayList<String>(list1);
// list2 자료구조에 요소 추가 → add()
list2.add("스파이더맨");
List<String> list3 = new ArrayList<String>();
// list3 에 list2 의 전체 요소 추가 → addAll()
list3.addAll(list2);
// "알라딘" 앞에 "탑건" 추가
// → [오펜하이머, 엘리멘탈, 알라딘, 스파이더맨]
// → [오펜하이머, 엘리멘탈, 탑건, 알라딘, 스파이더맨]
// ① "알라딘" 찾기 → indexOf() → 위치 인덱스 반환
int n = list3.indexOf("알라딘");
// 테스트(확인)
//System.out.println("n : " + n);
//--==>> n : 2
// ② "알라딘" 찾은 인덱스 위치에 "탑건" 삽입 → add()
list3.add(n, "탑건");
// 출력 → 더미데이터 확인
System.out.println("===============================");
System.out.println(list1);
//--==>> [오펜하이머, 엘리멘탈, 알라딘]
System.out.println(list2);
//--==>> []
//--==>> [오펜하이머, 엘리멘탈, 알라딘]
//--==>> [오펜하이머, 엘리멘탈, 알라딘, 스파이더맨]
System.out.println(list3);
//--==>> [오펜하이머, 엘리멘탈, 알라딘, 스파이더맨]
//--==>> [오펜하이머, 엘리멘탈, 탑건, 알라딘, 스파이더맨]
// 출력 → listIterator() 메소드를 활용하여 출력
System.out.println("===============================\n");
ListIterator<String> li = list3.listIterator();
while (li.hasNext()) // 다음 것이 있는지 없는지를 확인 (hasNext())
{
System.out.print(li.next() + " ");
}
System.out.println();
//--==>> 오펜하이머 엘리멘탈 탑건 알라딘 스파이더맨
// 출력 → 역순으로 접근
while (li.hasPrevious()) // 이전 것이 있는지 없는지를 확인 (hasPrevious())
{ // ← (진행방향 ▼ a의 이전 값.
System.out.print(li.previous() + " " ); // --------------------
// a b c d
// --------------------
}
System.out.println();
//--==>> 스파이더맨 알라딘 탑건 엘리멘탈 오펜하이머
}
}