D+14::자료구조/스택/큐/리스트/set/Collection컬렉션/ArrayList

Am.Vinch·2022년 7월 14일
0

20220714 Thu

자료구조(데이터를 저장하고 읽는 방식)

  • 스택(LIFO)

  • 큐 (FIFO)

  • 리스트(LIst) !!실무에서 가장 많이 사용
    -> 데이터에 순번이 존재
    -> 중복 허용

  • Set
    ->데이터에 순번이 없다.(순서라는 개념x)
    -> 중복 허용하지않음.

    • HashSet
    • treeSet
  • List(인터페이스)
    인터페이스는 객체를 못만든다.
    인터페이스는 클래스를 만들 때 사용한다.
    List 인터페이스를 구현해놓은 클래스도 제공한다.
    -> 그래서 객체를 사용할 때는 인터페이스가 아닌 클래스를 사용해야 쓸 수 있다.

    • ArrayList(배열기반 리스트)
    • LinkedList(연결기반 리스트)
    프로젝트명 : Collection
    //ArrayList
package list;

import java.util.ArrayList;//arrayList 임포트되어야 사용가능함.
import java.util.List;//List 임포트해야 사용가능함.

public class List1 {
	public static void main(String[] args) {
		//밑에 둘 주 하나 사용 모두 가능
//		ⓐ
//		ArrayList<E> list = new ArrayList<>();//클래스로 객체 생성
		
//		ⓑ
		//데이터의 목록이지만.. 같은 자료형(<String>)만 들어올 수 있다.
		//list 라는 이름의 통을 만든 것.
		List<String> list = new ArrayList<>();//배열리스트로 객체 생성
		//List<String> list = new LinkedList<>();//연결리스트로 객체 생성
		//>>연결리스트로만 글자 바뀌어도 사용가능 
		//그 이유는? 두 개의 리스트 모두 컬렉션 인터페이스를 상속받기 때문에 
		
		//데이터 넣기(삽입)
		list.add("java");//0번(주의 1번 아님)
		list.add("c++");//1번
		list.add("python");//2번
		list.add("python");//3번
		
		//데이터 읽기
		list.get(0);//n 번째 데이터를 갖고오자
		//Q) 데이터삽입은 문자열로 했는데 읽기는 정수로 하는가?
		//A) 리스트의 성질 때문에, 데이터를 넣는 순서대로 순번이 매겨짐.>>>그래서 데이터를 뺄 때는 순번대로 빼기 때문에 정수형 필요함.

		String a = list.get(0);
		 //하지만 리턴타입은 문자열이기때문에 String 문자열 자료형 필요함.
		
		//데이터 모두 출력하기
		for(int i = 0; i < list.size(); i++)//리스트도 배열과 같다. 순번이 존재하면 for문 잘 어울림.
			//배열과 달리 길이는 size로 표시한다.!!
		System.out.println(list.get(i));
//		[콘솔창]
//		java
//		c++
//		python
//		python

		
		//데이터 삭제하기.
		list.remove(0);//삭제할 때도 몇번째 삭제할 것인지 정수형 필요함.
		System.out.println(list.get(0));//c++
		//주의!!
		//삭제를 하면, 데이터를 사라지는 것이 아니라 바로 뒤에 있던 데이터(c++) 를 차례로 땡겨온다. 
		//그래서 0번째 java 를 삭제시, 1번째 였떤 c++  -> 0번째 자료가 되는것
	
	}

}
package list;

import java.util.ArrayList;
import java.util.List;

public class List2 {
	public static void main(String[] args) {
		//정수가 들어가는 리스트(int x )
		List<Integer> list = new ArrayList<>();//자동완성으로 무조건!! 두개 다 임포트 시켜줘야 한다.
		list.add(10);
		list.add(10);
		list.add(10);
		
		int r = list.get(0);
		//(주의)들어가 있는 정수형 데이터 값 x 
		// 빼내려는 데이터가 들어있는 순번 o
		
		
		//ⓐ for 문으로 출력
		for(int i = 0; i< list.size(); i++) {
		System.out.println(r);
	
		}
	
		//ⓑ for-each문으로 출력	    
		for(int e : list ) {//(중요)!! list라는 데이터에서 뺏을 때 어떤 자료형인지가 중요 >> int( 정수 데이터)
		System.out.println(r);		
	
		}
	
	
	}
}
## set 
  package Set;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class Set1 {
	public static void main(String[] args) {
//		List<String> list = new ArrayList<>();
		Set<String> set = new HashSet<>();// 리스트와 같은 형태

		// set 데이터 넣기
		set.add("java");
		set.add("c++");
		set.add("python");
		set.add("c++");

		// set 값 빼기( 순번이 없음 )
		// set.get(); 불가능

		for (String e : set) {
			System.out.println(e);
//			[콘솔창]
//	    	c++
//	    	python
//	    	java
/////////////////////////////////////////////////////////////////////
			Set<Integer> set1 = new HashSet<>();// 리스트와 같은 형태

			// set 데이터 넣기
			set1.add(20);
			set1.add(10);
			set1.add(15);
			set1.add(46);

			for (String e1 : set) {
				System.out.println(e1);
			}
//////////////////////////////////////////////////////////////////////
			Set<Integer> set2 = new TreeSet<>();// Treeset 임포트하기.
			set2.add(20);
			set2.add(10);
			set2.add(15);
			set2.add(46);

			for (String e1 : set) {
				System.out.println(e1);
			}
		}
	}
}
profile
Dev.Vinch

0개의 댓글