Colletion 클래스들 - List
2023. 7. 18. 15:10ㆍJAVA

public class ListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Collection 클래스들 : 자료구조를 구현한 Java API 클래스들 - 대량의 데이터를 관리
// 배열과 차이점.
// 배열은 새로운 데이터의 추가,삭제 등의 작업이 다소 번거로움.
// 데이터의 추가/삭제/변경/정렬 등의 작업을 편하게 해주기 위해 만들어진 클래스들이 Collection임
// 컬렉션은 저장 방법론에 따라 크게 3가지 종류로 구분됨.
//1) List : 자료가 저장된 순서대로 있음 자동부여된 인덱스번호로 구분함. 중복된 값을 가질 수 있음
//2) Set : 순서 X, 인덱스 번호 X, 중복 데이터 X
//3) Map : 순서 X, 인덱스 번호대신에 식별자(key)를 사용함, 중복 key는 허용X, 중복 Data는 허용
// 위 3종류 모두 인터페이스여서 곧바로 객체생성이 불가능.
// 실제 코드 구현은 각 인터페이스를 구현한 자식 클래스들을 사용하는 것임
//1) List : ArrayList, LikedList, Vector
//2) Set : HashSet, TreeSet, LinkedHashSet
//3) Map : HashMap, TreeMap, LinkedHashMap, HashTable
//가장 많이 사용하는 List계열 부터 실습해보기.
//List는 인터페이스이기에 직접 new로 객체생성이 불가능
//List list= new List(); //error
//List인터페이스를 구현한 하위 클래스를 사용 - 제네릭<>을 이용하여 배열요소의 타입을 지정
ArrayList<String> aaa= new ArrayList<String>();
//List계열의 객체들이 가지고 있는 유용한 기능메소드들..
//1. 요소의 개수
int size= aaa.size();
System.out.println("요소 개수 : " + size);
//2. 요소의 추가
String s= new String("aa");
aaa.add( s );
aaa.add( new String("bb"));
aaa.add( "cc" ); //자동 new Stirng()
System.out.println("요소 개수 : " + aaa.size());
//3. 요소를 얻어오기
String ss= aaa.get(0);
System.out.println( ss );
System.out.println( aaa.get(1) );
System.out.println( aaa.get(2) );
//System.out.println( aaa.get(3) );//Exception발생
//4. 요소 삭제하기
aaa.remove(1);
System.out.println("용소 개수 : " + aaa.size());
System.out.println( aaa.get(0) );
System.out.println( aaa.get(1) );
//System.out.println( aaa.get(2) );//error
//5. 특정 위치에 추가하기
aaa.add(1, new String("dd"));
System.out.println(aaa.get(0));
System.out.println(aaa.get(1));
System.out.println(aaa.get(2));
//6. 제거할 때 인덱스 번호가 아닌 객체 참조변수로 제거 가능
String s2= new String("Test");
aaa.add(s2);
System.out.println("요소 개수 : " + aaa.size());
aaa.remove(s2);
System.out.println("요소 개수 : " + aaa.size());
//7. 요소 모두 제거하기
aaa.clear();
System.out.println("요소 개수 : " + aaa.size());
//8. 중복 데이터의 허용 알아보기
aaa.add("aa");
aaa.add("aa");
aaa.add("aa");
System.out.println(aaa.get(0));
System.out.println(aaa.get(1));
System.out.println(aaa.get(2));
//9. 요소의 비교 관련 기능들
//aaa.clear();
System.out.println(aaa.isEmpty()); //비어있는지 여부
System.out.println(aaa.contains("aa")); //"aa가 포합되어 있는지 여부"
System.out.println(aaa.contains("bb"));
//10. 한번에 여러요소를 추가하기
aaa.clear();
aaa.add("aa");
aaa.add("bb");
aaa.add("cc");
//다른 리스트..
ArrayList<String> bbb= new ArrayList<String>();
bbb.add("kk");
bbb.add("ss");
aaa.addAll(bbb);
System.out.println( aaa.toString() );// 요소들을 [,,,,,]모양의 문자열로 출력해줌(편의기능)
//10.1 특정위치에 한번에 추가하기
aaa.addAll(1, bbb);
System.out.println(aaa.toString());
// 위 addAll처럼. romoveAll(), containAll()도 존재함
//11. List계열에만 있는 기능
System.out.println( aaa.indexOf("cc"));
System.out.println( aaa.indexOf("tt")); //못찾으면 -1
// 요소의 값을 순차적으로 얻어오기...
//방법1. for문 사용하기
for(int i =0; i<aaa.size(); i++) {
String t= aaa.get(i);
System.out.println(t);
}
System.out.println();
//밥법2. 확장된 for문법 다른 언어에서는 for each문법이라고 부름
for(String t : aaa) {
System.out.println(t);
}
System.out.println();
//방법2. iterator()[반복자]를 이용하는 방법 Set수업에서 소개
//List 계열의 또 다른 하위 클래스들. 사용법 똑같음. 단, 성능이 다름
//LinkedList의 차이점 - 요소의 빈번한 추가/제거시에 속도가 빠름. 단, 요소의 접근이 오래걸릴수도 있음.
LinkedList<String> ccc=new LinkedList<String>();
ccc.add(new String("aaa"));
ccc.add("bbb");
ccc.add("ccc");
ccc.remove(1);
System.out.println(ccc.toString());
//ArrayList와 다 똑같음 단, 동기화 처리(Thread 수업시간에 소개)가 되어 있음
Vector<String> ddd= new Vector<String>();
ddd.add("aaa");
ddd.remove(0);
// <>제네릭에는 기본자료형은 불가능
// 혹시 int형을 여러개 리스트에 저장하고 싶다면? Wrapper class 사용
ArrayList<Integer> eee= new ArrayList<Integer>();
eee.add(10);
eee.add(20);
System.out.println(eee.toString());
//당연하게 개발자가 만든 class도 제네릭에 사용가능함
ArrayList<Person> people= new ArrayList<Person>();
people.add(new Person());
people.add(new Person());
people.add(new Person());
people.get(0).name= "sam";
people.get(0).age= 20;
people.get(0).show();
}
}
class Person{
String name;
int age;
void show() {
System.out.println(name+ " , " +age);
}
}'JAVA' 카테고리의 다른 글
| Collection 클래스들 - Map (0) | 2023.07.18 |
|---|---|
| Collection 클래스들 - Set (0) | 2023.07.18 |
| Java 고급 문법 - Collection 클래스들 (0) | 2023.07.18 |
| Generic (0) | 2023.07.18 |
| Interface 예제 (0) | 2023.07.14 |