Colletion 클래스들 - List

2023. 7. 18. 15:10JAVA

기존 배열과는 다르게 열차가 연결되는 장면을 떠올리면 편하다

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