티스토리 뷰

 

JAVA 

1.  Java Collection Framework

 

https://blog.csdn.net/qq_37939251/article/details/83396035

- Array

- Collections

- List - (ArrayList, Stack)

- Queue - (LinkedList, PriorityQueue)

- Map - Hashtable / HashMap/ SortedMap 

 

 

2. 배열(Array)

* java 

- 배열을 생성할 경우 데이터타입의 초기값으로 초기화가 된다.

- 배열은 여러개의 데이터를 저장할 때 사용되고  Index 구조에 저장된다.

- 배열의 길이는 한번 생성을 하면 줄이거나 늘릴 수 없으며 서로 다른 타입을 사용할 수도 없다. 

- 이때 정수형 = 0. boolean은 false형으로 초기화가 된다. 

 

(1) 배열 기본  

- 1차배열 

// int 배열 넣기 
int[] values = new int[] {1,2,3,4,5};
for(int value : values) System.out.println(value);

// String 배열 넣기 
String[] participant = {"leo", "kiki", "eden", "rosy"};    
for(String p : participant ) System.out.println(p); 

// 코드 길이가 10인 배열 만들기  
int[] scores = new int[10]; //
System.out.println(scores.length); //10

// 기본적으로 0으로 초기화
int [] number 1 = new int[K];
System.out.println(Arrays.toString(number1))

 

- 2차 배열 

기본적으로 0으로 초기화 

int [][] array2 = new int [8][9];
for (int i = 0 ; i < array2.length ; i++){
    System.out.println(Arrays.toString(array2[i]));
}

// 초기화는 0으로 됨 
// [0, 0, 0, 0, 0, 0, 0, 0, 0]
// [0, 0, 0, 0, 0, 0, 0, 0, 0]
// [0, 0, 0, 0, 0, 0, 0, 0, 0]
// [0, 0, 0, 0, 0, 0, 0, 0, 0]
// [0, 0, 0, 0, 0, 0, 0, 0, 0]
// [0, 0, 0, 0, 0, 0, 0, 0, 0]
// [0, 0, 0, 0, 0, 0, 0, 0, 0]
// [0, 0, 0, 0, 0, 0, 0, 0, 0]

구구단 

int [][] array2 = new int [8][9];
for (int i = 2 ; i< 10 ; i++){
    for (int j = 1; j < 10 ; j++){
        array2[i-2][j-1] = i * j;
    }
}

// [2, 4, 6, 8, 10, 12, 14, 16, 18]
// [3, 6, 9, 12, 15, 18, 21, 24, 27]
// [4, 8, 12, 16, 20, 24, 28, 32, 36]
// [5, 10, 15, 20, 25, 30, 35, 40, 45]
// [6, 12, 18, 24, 30, 36, 42, 48, 54]
// [7, 14, 21, 28, 35, 42, 49, 56, 63]
// [8, 16, 24, 32, 40, 48, 56, 64, 72]
// [9, 18, 27, 36, 45, 54, 63, 72, 81]

 

(2) 배열 나누기

- split 

String number = "1924";
String[] strArray = number.split(""); // 1 9 2 4 

 

 

- charAt  

String number = "1924";
for(int i=0 ; i<number.length() ; i++){
       System.out.println(number.charAt(i)); // 1 9 2 4 
}

 

 

- fill 

// Array fill
Arrays.fill(scores,1);
System.out.println(Arrays.toString(scores)); //[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

 

boolean [] exist = new boolean[n * n + 1];
Arrays.fill(exist, false);
// [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]

 

 

- sort 

Integer numberList[] = {10,10000, 5000,1000, 100,500,50000};
Arrays.sort(numberList);
System.out.println(Arrays.toString(numberList)); // [10, 100, 500, 1000, 5000, 10000, 50000]

Arrays.sort(numberList, Collections.reverseOrder());
System.out.println(Arrays.toString(numberList)); // [50000, 10000, 5000, 1000, 500, 100, 10]

 

 

for(Integer number : numberList) System.out.println(number); 

// 50000
// 10000
// 5000
// 1000
// 500
// 100
// 10

 

 

- 그 외 

System.out.println(Arrays.asList(numberList)); // [50000, 10000, 5000, 1000, 500, 100, 10]
System.out.println(Arrays.toString(numberList)); // [50000, 10000, 5000, 1000, 500, 100, 10]

 

 

 

* C# 

 

 

 

3. Collection

https://gamjatwigim.tistory.com/72

 

3.0 List

- List는 인터페이스 클래스이며 java.util.Collection 인터페이스를 구현한것

- 선언시 List list = new ArrayList();

 

List list1 = new ArrayList();
list1.add(3);
list1.add("hi");
System.out.println(list1); // [3, hi]

list1.add(list1.indexOf("hi"), "Thx");
System.out.println(list1); // [3, Thx, hi]


List<String> list = new ArrayList<String>();
list = List.of("가", "나", "다");
for(String string : list) System.out.println(string);
System.out.println(list.subList(0,3)); // [가, 나, 다]

Iterator iterator = list.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next());
}​

 

 

 

3.1 ArrayList

*  JAVA 

- import java.util.* 

- 일종의 클래스 

- ArrayLists는 동적으로 크기를 변경할 수 있음

- 특정위치에 element를 추가, 삭제가 가능함

- null도 저장이 가능

- Generic을 사용하지 않고 선언시, 다양한 타입 객체 저장 가능

- ListIterator 사용시 양방향 순회가능 - hasNext() , hasPrevious() 

 

//Integer인 경우 
ArrayList<Integer> list = new ArrayList<>();
list.add(0); 
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for(int i : list) System.out.println(i);        



//String인 경우 
ArrayList<String> list2 = new ArrayList<>();
list2.add("rosy");
list2.add("sam");
for(String string : list2) System.out.println(string);

 

Collections을 사용해서 max, min 사용하기 

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
System.out.println(Collections.max(list)); //10
System.out.println(Collections.min(list)); // 1

 

 

범위를 지정하여  List로 들고오기 

- subList(int startNumber, int endNumber)

- 하지만 SubList을 쓰게 되면 메모리 문제가 있다. 

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
System.out.println(list.subList(0,3)); // [1,2,3]

 

 

그러므로 다음과 같이 새로  ArrayList를 생성해서 넣어준다.

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
ArrayList<Integer> newList = new ArrayList<>(list.subList(0,3)); 
System.out.println(newList); // [1,2,3]

 

 

특정데이터 삭제하기 remove(int value)

특정 데이터 가져오기 get(int index)

 

1
2
3
list.remove(2);
list.get(0);
list.subList(0,1);
cs

 

 

 

 

cf) iterator사용하여 순회하는방법

- iterator란? 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법들 표준화 

 

1
2
3
4
5
Iterator itr = list.iterator();
 
while(itr.hasNext()){
    System.out.println(itr.next());
}
cs

 

 

<출처>

1. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=yjw2288&logNo=221072561904

 

* C# 

- 배열과 닮은 컬렉션

- 배열과는 달리 컬렉션을 생성할 때 용량을 미리 지정할 필요가 없이 필요에 따라 자동으로 용량이 늘어남

- Add(), RemoveAt(), Insert() 

1
2
3
4
5
6
7
8
9
10
11
12
13
ArrayList list = new ArrayList();
list.Add(10);
list.Add(20);
list.Add(30);
 
list.RemoveAt(1);
list.Insert(239);
            
for(int i=0; i<list.Count; i++)
{
    Console.WriteLine(list[i]); //10,30,39
 
}
cs

 

 

 

 

* Python 

 

 

 

 

 

 

3.2 Queue

https://www.programiz.com/dsa/queue

- 큐 메모리구조? 선입선출을 따르는 자료구조

- 가장 먼저 저장된 데이터(push)가 가장 먼저 인출(pop)되는 구조

 

 

* JAVA

https://beginnersbook.com/2017/08/queue-interface-in-java-collections/

- 클래스로 구현된 stack과는 다르게 자바에서 큐 메모리 구조는 별도의 인터페이스 형태로 제공

- Index를 통해 값을 가져오는게 없음 (자바의 경우?) 

- Queue 인터페이스를 상속받는 하위 인터페이스?

- 기본형식?

Queue q1 = new LinkedList();
Queue q2 = new PriorityQueue();

-> Deque<E> / BlockingDeque<E> / BlockingQueue<E> / TransferQueue<E> 

 

(1) LinkedList

- 데이터를 저장하는 각 노드가 이전노드와 다음 노드상태만 알고 있음

- 불필요한 데이터 복사가 없기 때문에 추가, 삭제가 유리하지만,   데이터 검색 시 처음부터 찾아야함 

 

* 직접 구현 

- int value -> 데이터 저장 변수

- ListNode next -> 다른 노드 참조 링크 노드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class ListNode{
    int value; // 데이터 저장 변수
    ListNode next; // 다른 노드를 참조할 링크 노드
 
 
    ListNode(int x){
        this.value = x;
    }
 
    public ListNode() {
 
    }
}
 
 
public class Class {
 
    public static void main(String args[]){
 
        ListNode l1 = new ListNode(2);
        l1.next = new ListNode(4);
        l1.next.next = new ListNode(3);
        
        ListNode l2 = new ListNode(5);
        l2.next = new ListNode(6);
        l2.next.next = new ListNode(2);
        
        while(l1!=null || l2!=null){
            System.out.println(l1.value +" -- " + l2.value );
            l1 = l1.next;
            l2 = l2.next;
        }
    
    }
 
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
LinkedList<Integer> numbers = new LinkedList<>();
 
numbers.add(2);
 
numbers.add(4);
 
numbers.add(1,20); // index 1뒤에 20 추가
 
numbers.addFirst(3);
 
numbers.addLast(9);
 
 
 
System.out.println(numbers.contains(10));
 
System.out.println(numbers.indexOf(3));
 
System.out.println(numbers.size());
 
 
 
numbers.removeFirst();
 
numbers.removeLast();
 
numbers.remove(2);
 
numbers.clear(); // 모든값 제거
cs

 

 

(2) PriorityQueue

- 우선순위 큐란? 들어간 순서에 상관없이 일정한 규칙에 따라 우선순위를 선정하고, 우선순위가 가장 높은 데이터가 먼저 나오는것 

 

  예외발생 값 리턴
추가 add offer
삭제 remove poll
검사 element  peek

-> 표 출처 https://goodteacher.tistory.com/112

 

 

 

 

 

 

* C# 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
 
            Queue que = new Queue();
            que.Enqueue(1);
            que.Enqueue(2);
            que.Enqueue(3);
            que.Enqueue(4);
            que.Enqueue(5);
     
 
            while (que.Count > 0)
            {
                Console.WriteLine(que.Dequeue());
 
            }
 
 
        }
    }
}
 
cs

 

 

--> 실행결과

 

 

 

3.3 Stack

https://www.programiz.com/dsa/stack

- 먼저 들어온 데이터가 나중에 나가고, 나중에 들어온 데이터는 먼저 나가는 구조의 컬렉션

- Push()와 Pop()을 이용 

- 후입선출(LIFO) 시멘틱을 따르는 자료 구조 

 

* JAVA

- List Collection 클래스의 Vector 클래스를 상속받아, 전형적인 스택 메모리 구조의 클래스 제공

- Stack <Integer> st = new Stack<Integer>();

- empty(), peek() 스택 상단에 있는 요소 반환 , pop(),

- push(E item) 상단에 전달된 요소 삽입, int search(Object o) 인덱스 반환  

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Example {
 
    public static void main(String args[]){
        Stack<Integer> stack = new Stack<>();
        stack.push(4);
        stack.push(3);
        stack.push(7);
        stack.pop();
 
        //peek method 사용
        System.out.println(stack.peek());
 
        //peek method 사용
        System.out.println(stack);
 
        //search method 사용
        System.out.println(stack.search(7));
 
 
 
    }
}
cs

 

 

 

* C# 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
 
            Stack stack = new Stack();
            stack.Push(1);
            stack.Push(2);
            stack.Push(3);
            stack.Push(4);
            stack.Push(5);
 
            while(stack.Count > 0)
            {
                Console.WriteLine(stack.Pop());
 
            }
 
 
        }
    }
}
cs

 

실행결과 -->

 

 

3.4 Hashtable 

 

* JAVA 

- Key와 Value의 쌍으로 이루어진 데이터 보관

- Map 인터페이스를 구현한 대표적인 Map 컬렉션, 고정시간을 제공하는 key-value 데이터 구조 

- HashMap은 다음과 같은 특징이 존재

(1) null key와 null value를 모두 허용

(2) 내부적으로 데이터를 접근할때 동기화를 보장하지 않음

(3) 데이터의 순서를 보장하지 않음

(4) 중복된 key값을 허용하지는 않지만, 중복된 값을 가질수는 있음

(5) O(1) 복잡도는 get과 push 동작에 동일

 

다음과 같은 API를 제공함

- put(), putAll(), get(), remove(), clear(), isEmpty(), keySet(), values(), containKey(), containsValue(), replace()

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
   public static void main(String args[]){
        HashMap<String, Integer> names = new HashMap<>();
        names.put("Jadon",20);
        names.put("Rosy",30);
        names.put("Faker",24);
 
 
        for(String key : names.keySet())
            System.out.println(key + "- " + names.get(key));
        /*
        Rosy- 30
        Faker- 24
        Jadon- 20
        
         */
 
        Iterator<String> keys = names.keySet().iterator();
        while(keys.hasNext()){
            String key = keys.next();
            System.out.println(key +"-" + names.get(key));
        }
        
        /*
       Rosy-30
       Faker-24
       Jadon-20
         */
        
    }
cs

 

* HashMap을 사용하여 forEach문 돌리기 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Example {
 
    public static void main(String args[]){
 
        Map<String, Integer> foodsPrice = new HashMap<>();
        foodsPrice.put("Chicken"3000);
        foodsPrice.put("Apple"2000);
        foodsPrice.put("Milk"1500);
 
        foodsPrice.forEach((key, value)
             -> System.out.println("key : " + key +"  value : "+ value));
        /*
        key : Apple  value : 2000
        key : Chicken  value : 3000
        key : Milk  value : 1500
         */
 
        foodsPrice.keySet().forEach((key)-> System.out.println(key));
        /*
        Apple
        Chicken
        Milk
         */
 
        foodsPrice.values().forEach((value) -> System.out.println(value));
        /*
        2000
        3000
        1500
         */
 
    }
}
cs

 

 

* map의 가장 큰 특징? - 순서에 의존하지 않고 key로 value를 가지고 온다

- 하지만 map에 입력된 순서대로 데이터를 가지고 싶을때에는?

- 입력된 key에 의해 소트된 데이터를 가지고 싶을 때에는?

- 이때는 LinkedHashMap, TreeMap 사용 필요

-> LinkedHashMap = 순서대로 데이터가 출력되는 특징

Map<String, Integer> linkedhashmap = new LinkedHashMap<>();

-> TreeMap은 입력된 key의 소트순으로 데이터가 출력되는 특징

Map<String, Integer> treemap = new TreeMap();

 

HashMap 함수

1. startsWith()

 

2. getOrDefault()

 

3. indexOf() 

 

 

 

 

 

* C#

- key와 value의 쌍으로 이루어진 데이터를 다룰때 사용 

- ArrayList에서 원하는데이터를 찾으려면 컬렉션을 정렬해서 이진 탐색 수행 필요 하지만 Hashtable은 키를 이용해서 단번에 데이터가 저장되어 있는 컬렉션 내의 주소 계산 -> 해싱(Hashing) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections;
using static System.Console
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();
            ht["봄"= "spring";
            ht["여름"= "summer";
            ht["가을"= "fall";
            ht["겨울"= "winter";
 
            WriteLine(ht["봄"]);
            WriteLine(ht["여름"]);
            WriteLine(ht["가을"]);
            WriteLine(ht["겨울"]);
 
        }
    }
}
 
cs

 


Python 

 

 

stones = "aAAbbbb"
freqs = collections.defaultdict(int);
for char in stones:
    freqs[char] += 1;

print(freqs) #defaultdict(<class 'int'>, {'a': 1, 'A': 2, 'b': 4})

 

 

 

 

참고 -  Generic 만들기

- 제네릭을 왜 만들어야 하는가? 

(1) 컴파일시 타입체크가능

(2) casting 사용하지 않아 오류 발생률 낮춤 

(3) Object 타입 사용시 모든 객체 저장할 수 있지만 저장할 때 타입변환 발생, 읽어올때에도 타입변환 발생 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Generic<T>{
    private T t;
 
    public T get() {
        return t;
    }
 
    public void set(T t) {
        this.t = t;
    }
}
 
 
public class Example {
 
    public static void main(String args[]){
 
        Generic<String> generic = new Generic();
        generic.set("예상");
        String name = generic.get();
        System.out.println(name);
 
        Generic<Double> genericDouble = new Generic();
        genericDouble.set(0.22);
        double number = genericDouble.get();
        System.out.println(number);
 
    }
}
cs

 

 

 

<출처>

1.  https://codechacha.com/ko/java-map-hashmap/

2. codechacha.com/ko/java-map-hashmap/

3.beginnersbook.com/2017/08/queue-interface-in-java-collections/ 

4. https://goodteacher.tistory.com/112

5. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함