리스트는 배열과 비슷한 자바의 자료형으로 배열보다 편리한 기능을 많이 가지고 있습니다.
리스트와 배열의 가장 큰 차이점은 크기가 정해져 있지 않고 동적으로 변한다는 점 입니다.
데이터를 크기를 알 수 없을 때 유용하게 사용할 수 있습니다.
List list new ArrayList();
list.add("우영우");
Object obj = list.get(0);
String name = (String) obj;
list<String> list = new ArrayList<String>();
list.add("우영우");
String name = list.get(0);
개체의 배열을 구현한 클래스이며 컬렉션 인터페이스와 그 하위의 List 인터페이스로 구현 합니다.
객체 순서를 기반으로 순차적으로 자료를 관리하는 프로그램을 구현 할 때 사용 합니다.
import java.util.ArrayList;
public class Sample {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
pitches.add("142");
System.out.println(pitches);
}
}
제네릭스 : 자바는 J2SE 5.0 버전 이후부터 ArrayList<String> pitches = new ArrayList<>();
처럼 객체를 포함하는 자료형도 어떤 객체를 포함하는지에 대해서 명확하게 표현할 것을 권고하고 있다.
해당 컬렉션에 요소를 추가 하거나 해당 인덱스 위치에 값을 삽입
pitches.add(0, "130");
특정 위치의 값을 가져 올 때
System.out.println(pitches.get(1));
ArrayList의 갯수를 리턴한다.
System.out.println(pitches.size());
리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴한다.
System.out.println(pitches.contains("142"));
remove(객체) : 리스트에서 객체에 해당되는 항목을 삭제하고 삭제한 결과(true, false)를 리턴
System.out.println(pitches.remove("129"));
true
remove(인덱스) : 해당 인덱스의 항목을 삭제하고 삭제된 항목을 리턴
System.out.println(pitches.remove(0));
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
pitches.add("142");
System.out.println(pitches);
String one = pitches.get(0); // 형 변환이 필요없다.
String two = pitches.get(1); // 형 변환이 필요없다.
System.out.printf("%s %s\n", one, two);
}
public static void main(String[] args) {
String[] data = {"138", "129", "142"};
ArrayList<String> pitches = new ArrayList<>(Arrays.asList(data));
System.out.println(pitches);
}
콤마로 구분하여 문자열 만들기
public static void main(String[] args) {
String[] data = {"138", "129", "142"};
ArrayList<String> pitches = new ArrayList<>(Arrays.asList(data));
String result = String.join(",", pitches);
System.out.println(result);
}
Comparator.naturalOrder()
Comparator.reverseOrder()
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class List {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
pitches.sort(Comparator.naturalOrder()); // 오름차순으로 정렬
System.out.println(pitches); // [129, 138, 142] 출력
}
}
class MenuInfo {
String name = "";
int price;
String category = "";
String desc = "";
boolean isTax;
MenuInfo(String name, int price, boolean isTax) {
this.name = name;
this.price = price;
this.isTax = isTax;
}
public String getJsonFormat() {
return "{"+"\"name\":"+name+","+"\"price\":"+price+","+"\"isTax\":"+isTax+"}";
}
}
public class List {
public static void main(String[] args) {
ArrayList<MenuInfo> menuList = new ArrayList<>();
menuList.add(new MenuInfo("Americano", 2000, true));
menuList.add(new MenuInfo("Latte", 4000, true));
menuList.add(new MenuInfo("Espresso", 2500, true));
for(int i = 0; i < menuList.size(); i++) {
System.out.println(menuList.get(i).getJsonFormat());
}
}
}
package 어레이홀짝;
public class ArrayListEx1 {
public static void main(String[] args) {
ArrayMethod arrayMethod = new ArrayMethod();
arrayMethod.inputValue();
arrayMethod.calcMethod();
arrayMethod.printMethod();
}
}
package 어레이홀짝;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ArrayMethod {
List<Integer> inList = new ArrayList<>();
List<Integer> oddList = new ArrayList<>();
List<Integer> evenList = new ArrayList<>();
// 정수값 입력 받는 메소드
void inputValue() {
int tmp = 0;
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
while(true) {
tmp = sc.nextInt();
if(tmp == 999) break;
inList.add(tmp);
}
}
void calcMethod() {
for(Integer e : inList) {
if(e % 2 == 0) evenList.add(e);
else oddList.add(e);
}
}
void printMethod() {
System.out.print("홀수 : ");
for(Integer e : oddList) System.out.print(e + " ");
System.out.println();
System.out.print("짝수 : ");
for(Integer e : evenList) System.out.print(e + " ");
System.out.println();
}
}
사용 방법은 ArrayList와 동일 합니다.
LinkedList 클래스는 ArrayList 클래스가 배열을 이용하여 요소를 저장함으로써 발생하는 단점을 극복하기 위해 고안되었습니다.
JDK 1.2부터 제공된 LinkedList 클래스는 내부적으로 연결 리스트(linked list)를 이용하여 요소를 저장합니다.
배열은 저장된 요소가 순차적으로 저장됩니다.
하지만 연결 리스트는 저장된 요소가 비순차적으로 분포되며, 이러한 요소들 사이를 링크(link)로 연결하여 구성합니다.
다음 요소를 가리키는 참조만을 가지는 연결 리스트를 단일 연결 리스트(singly linked list)라고 합니다.
Vector는 ArrayList와 동일한 내부 구조를 가지고 있습니다. (사용 방법 동일)
**List<E> list = new Vector<E>();**
ArrayList와 다른점은 동기화된(synchronized) 메소드로 구성되어 있어 멀티 쓰레드 환경에서 안전하지만 ArrayList에 비해 성능은 떨어 집니다.
package 벡터연습;
import java.util.List;
import java.util.Vector;
public class VectorMain {
public static void main(String[] args) {
List<NameCard> list = new Vector<>();
list.add(new NameCard("우영우", "yyy@gmail.com", "010-1234-5678", "변호사"));
list.add(new NameCard("동그라마", "ddd@gmail.com", "010-1234-5678", "무직"));
list.add(new NameCard("이준호", "ljh@gmail.com", "010-1234-5678", "회사원"));
for(NameCard e : list) {
System.out.println("이름 : " + e.name);
System.out.println("메일 : " + e.mail);
System.out.println("전화 : " + e.phone);
System.out.println("직업 : " + e.jobs);
}
}
}
class NameCard {
String name;
String mail;
String phone;
String jobs;
public NameCard(String name, String mail, String phone, String task) {
this.name = name;
this.mail = mail;
this.phone = phone;
this.jobs = task;
}
}