"나 여기있어."

"안녕, 엘리!"

"오늘은 흥미로운 주제에 대해 이야기하겠습니다. ArrayList 클래스 에 대해 말씀드리겠습니다 ."

"새로운 클래스? 멋지다! 무엇을 할 수 있을까?"

"비하인드 스토리부터 시작하겠습니다. 프로그래머가 배열에 대해 싫어하는 유일한 점은 배열의 크기를 변경할 수 없다는 것입니다. 여유 슬롯이 하나만 있는 배열에 세 개의 요소를 더 추가해야 하는 경우 어떻게 하시겠습니까? "

"이 문제에 대한 유일한 해결책은 모든 요소를 ​​위한 충분한 공간을 보장하기 위해 매우 큰 배열을 만드는 것입니다. 그러나 이것은 종종 메모리 낭비를 의미합니다. 배열에 일반적으로 세 개의 요소가 포함되어 있지만 가장 작은 기회가 있는 경우 100개 요소를 수용해야 할 수도 있으므로 100개 요소 배열을 만들어야 합니다."

"그래서, 프로그래머들은 무엇을 생각해냈습니까?"

"그들은 Array와 동일한 작업을 수행하지만 크기를 변경할 수 있는 ArrayList 클래스를 작성했습니다."

"흥미로운 움직임이군요. 어떻게 한 거죠?"

"모든 ArrayList 개체는 요소의 일반 배열을 저장합니다. ArrayList 에서 요소를 읽을 때 내부 배열에서 읽습니다. ArrayList 에 쓸 때 내부 배열에 씁니다. 여기에서 다음 열을 비교하십시오."

정렬 배열목록
요소에 대한 컨테이너 만들기
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
요소 수 얻기
int n = list.length;
int n = list.size();
배열/컬렉션에서 요소 가져오기
String s = list[3];
String s = list.get(3);
배열에 요소 쓰기
list[3] = s;
list.set(3, s);

"그래서 ArrayList가 더 나은 이유는 무엇입니까? 제가 아는 한 코드가 더 길어졌습니다."

"첫째, ArrayList는 프로그래머가 항상 수행해야 하는 몇 가지 추가 작업을 지원합니다. 일반 배열은 이러한 작업을 지원하지 않습니다. 예를 들어 구멍을 남기지 않고 배열 중간에서 요소를 삽입하거나 삭제합니다. "

"두 번째, 배열의 크기를 변경하는 기능입니다. 하나 이상의 요소를 추가해야 하지만 내부 배열에 여유 슬롯이 없는 경우 ArrayList 내부에서 다음과 같은 일이 발생 합니다 .

a) 현재 내부 배열보다 50% 더 큰 다른 배열과 하나의 요소가 생성됩니다.

b) 이전 배열의 모든 요소가 새 배열로 복사됩니다.

c) 새 배열은 ArrayList 개체의 내부 배열로 저장됩니다. 이전 배열은 쓰레기로 선언됩니다 (단지 해당 배열에 대한 참조 저장을 중지함)."

정렬 배열목록
배열 끝에 요소 추가
이 작업은 지원되지 않습니다.
list.add(s);
배열 중간에 요소 추가
이 작업은 지원되지 않습니다.
list.add(15, s);
배열의 시작 부분에 요소 추가
이 작업은 지원되지 않습니다.
list.add(0, s);
배열에서 요소 삭제
로 요소를 삭제할 수 있습니다 list[3] = null. 그러나 이것은 어레이에 '구멍'을 남길 것입니다.
list.remove(3);
2
과제
Java Syntax,  레벨 7레슨 5
잠금
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and earn a little dark matter. What's more, you combat laziness.

"이 ArrayList로 어떻게 작업합니까?"

"실제로 일반 배열을 사용하는 것과 같습니다. 보세요. ArrayList 작업을 배열 작업과 비교해 봅시다. ' 10개의 문자열을 읽고 화면에 역순으로 표시 '해야 한다고 가정해 보겠습니다."

"이거 봐요:

배열로
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
ArrayList 사용
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList&ltString> list = new ArrayList&ltString>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

// Display the contents of the collection
for (int i = 0; i < list.size(); i++)
{
  int j = list.size() - i - 1;
  System.out.println( list.get(j) );
}
}

각 열에서 유사한 작업을 강조하기 위해 동일한 색상을 사용했습니다."

"한편으로는 모든 것이 다릅니다. 다른 한편으로는 여전히 동일합니다."

"맞아요. ArrayList 로 작업할 때 대괄호를 사용하지 않는다는 점만 빼면요. 대신 get , setadd 메서드를 사용합니다 ."

"네, 이만큼 모았습니다. 그래도 너무 똑같아 보여요."