Java๐ŸŽ€

Java - ArrayList, LinkedList

Jeein0313 2022. 10. 25. 22:48

โ• ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ๋•Œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์ธ ArrayIndexOutofBoundsException.

๋ฐฐ์—ด์„ ์„ ์–ธํ•  ๋•Œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํฌ๊ธฐ์— ๋ฒ—์–ด๋‚˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ.

import java.util.Arrays;


public class Main{
  public static void main(String[] args){
    String[] classGroup={"a","b","c","d"};
    int[] gradeGroup=new int[4];

    
    for(int i=0;i<gradeGroup.length;i++){
      gradeGroup[i]=i;
    }

    for (int i=0;i<classGroup.length;i++){
      System.out.println(classGroup[i]);
    }

    System.out.println(Arrays.toString(gradeGroup));//[0, 1, 2, 3]
	  
		for(int i:gradeGroup){
      System.out.println(i);
    }
		
		int[][] myNumbers={{1,2,3,4},{5,6,7}};
    for(int i=0;i<myNumbers.length;i++){
      for(int j=0;j<myNumbers[i].length;j++){
        System.out.println(myNumbers[i][j]);
      }
    }  
  }
	
}

JCF(Java Collections Framework)

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” Java Collections Framework๊ฐ€ ์žˆ๋‹ค. Collection์ด๋ž€ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ, ๊ทธ๋ฃน์„ ๋งํ•˜๊ณ , JCF๋Š” ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ, ์ž๋ฃŒ๊ตฌ์กฐ์ธ ์ปฌ๋ ‰์…˜๊ณผ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด ๋ฐฐ์—ด์„ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ.

Collection์ธํ„ฐํŽ˜์ด์Šค๋Š” List, Set, Queue๋กœ ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Map์˜ ๊ฒฝ์šฐ, Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ์ง€๋Š” ์•Š์œผ๋‚˜, Collection์œผ๋กœ ๋ถ„๋ฅ˜๋จ.

 

 

Collection ์ธํ„ฐํŽ˜์ด์Šค์˜ ํŠน์ง•

1. Set ์ธํ„ฐํŽ˜์ด์Šค

     HashSet : ๊ฐ€์žฅ ๋น ๋ฅธ ์ž„์˜ ์ ‘๊ทผ ์†๋„, ์ˆœ์„œ ์˜ˆ์ธก ๋ถˆ๊ฐ€

     TreeSet : ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

2. List ์ธํ„ฐํŽ˜์ด์Šค

     LinkedList : ์–‘๋ฐฉํ–ฅ ํฌ์ธํ„ฐ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜์ •๋ณด๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๊ธฐ์— ์œ ์šฉ
                         (์Šคํƒ, ํ, ์–‘๋ฐฉํ–ฅ ํ ๋“ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์“ฐ์ž„)

     Vector : ๊ณผ๊ฑฐ์— ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ๋‚ด๋ถ€์—์„œ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”์ฒ˜๋ฆฌ๊ฐ€ ์ผ์–ด๋‚˜ ๋น„๊ต์  ์„ฑ๋Šฅ์ด ์ข‹์ง€ X.

     ArrayList : ๋‹จ๋ฐฉํ–ฅ ํฌ์ธํ„ฐ ๊ตฌ์กฐ๋กœ ๊ฐ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์กฐํšŒ ๊ธฐ๋Šฅ์— ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚จ.

3. Map ์ธํ„ฐํŽ˜์ด์Šค

    Hashtable : HashMap๋ณด๋‹ค๋Š” ๋А๋ฆฌ์ง€๋งŒ ๋™๊ธฐํ™” ์ง€์›, null ๋ถˆ๊ฐ€

    HashMap : ์ค‘๋ณต๊ณผ ์ˆœ์„œ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ null๊ฐ’์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

    TreeMap : ์ •๋ ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ key, value๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ฒ€์ƒ‰์ด ๋น ๋ฆ„.

 

ArrayList

๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ List๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•. ํŠน์ • ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, ๊ธฐ์กด์˜ data๋ฅผ ์˜†์œผ๋กœ ๋ฐ€๊ณ , ๋นˆ ๊ณต๊ฐ„์— ์‚ฝ์ž…. ๋”ฐ๋ผ์„œ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.(์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”). ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ(์กฐํšŒ)๋Š” ๋น ๋ฅด๋‹ค.

iterator๋Š” ArrayList, HashSet๊ณผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด.

import java.util.ArrayList;
import java.util.Iterator;

public class Main{
  public static void main(String[] args){
    ArrayList<String> list=new ArrayList<>(Arrays.asList("h","e","l","l","o"));
    System.out.println(list);//[h, e, l, l, o]

    ArrayList<Integer> numbers=new ArrayList<>();
    for(int i=0;i<4;i++){
        numbers.add(i,i*10); //์œ„์น˜, ๊ฐ’
    }
    System.out.println(numbers);//[0, 10, 20, 30]
    //์‚ญ์ œ
    numbers.remove(2);
    System.out.println(numbers);//[0, 10, 30]
    //์กฐํšŒ
    System.out.println(numbers.get(2));//30
    //ํฌ๊ธฐ
    System.out.println(numbers.size());//3

    //Iterator
    Iterator it=numbers.iterator();
    while(it.hasNext()){
        int value=(int)it.next();
        System.out.print(value+" ");//0 10 30
    }

    System.out.println();

    //for-each
    for(int value:numbers){
        System.out.print(value+" ");//0 10 30
    }
    System.out.println();
      
    //ArrayList ๋’ค์ง‘๊ธฐ
    Collections.reverse(list);
    System.out.println(list);//[o, l, l, e, h]
    
  }
}

LinkedList

์ด ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†๋œ ์œ„์น˜์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„๊ณผ ์ฃผ์†Œ ๋ถ€๋ถ„์„ ๋ณ„๋„๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ํฌ์ธํ„ฐ์™€ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•œ๋‹ค. ๊ฐ ๋ฐ์ดํ„ฐ๋Š” ๋…ธ๋“œ๋ผ ๋ถˆ๋ฆฌ๋ฉฐ, ๋ฐฐ์—ด์—์„œ ์ž์ฃผ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์œ ๋ฆฌํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๊ฒ€์ƒ‰์— ์žˆ์–ด์„œ๋Š” ArrayList๋ณด๋‹ค ๋А๋ฆฌ๋‹ค.

์ž๋ฐ”๋กœ ๊ตฌํ˜„ํ•œ LinkedList

import java.util.ArrayList;
import java.util.Iterator;


class LinkedList{
  private Node head;
  private Node tail;
  private int size=0;
  
  private class Node{
    private Object data;
    private Node next;
    public Node(Object input){
      this.data=input;
      this.next=null;
    }
    public String toString(){
      return String.valueOf(this.data);
    }
  }
    
  public void addFirst(Object input){//head์— data ์ถ”๊ฐ€
    Node newNode=new Node(input);
    newNode.next=head;
    head=newNode;
    size++;
    if(head.next==null){//node๊ฐ€ 1๊ฐœ
        tail=head;
    }
  }

  public void addLast(Object input){//tail์— data ์ถ”๊ฐ€
    Node newNode=new Node(input);
    if(size==0){
        addFirst(input);
    }else{
      tail.next=newNode;
      tail=newNode;
      size++;
    }
      
  }

  public Node node(int index){//node ํƒ์ƒ‰
    Node x=head;
    for(int i=0;i<index;i++){
      x=x.next;
    }
    return x;
  }

  public void add(int index, Object input){//์ค‘๊ฐ„์— ์ถ”๊ฐ€
    if(index==0){
      addFirst(index);
    }else{
      Node temp1=node(index-1);
      Node temp2=temp1.next;
      Node newNode=new Node(input);
      temp1.next=newNode;
      newNode.next=temp2;
      size++;
      if(newNode.next==null){//๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ผ๋ฉด
        tail=newNode;
      }
    }
  }

  public String toString(){//๋ฆฌ์ŠคํŠธ ์ „์ฒด ์ถœ๋ ฅ
    if(head==null){
      return "";
    }
    Node temp=head;
    String str="[";

    while(temp.next!=null){
      str+=temp.data+", ";
      temp=temp.next;
    }
    str+=temp.data;
    return str+"]";
  }

  public Object removeFirst(){
    Node temp=head;
    head=head.next;
    Object returnData=temp.data;
    temp=null;
    size--;
    return returnData;
  }

  public Object remove(int index){
    if(index==0){
      return removeFirst();
    }
    Node temp=node(index-1);
    Node todoDeleted=temp.next;
    temp.next=temp.next.next;
    Object returnData=todoDeleted.data;
    if(todoDeleted==tail){
      tail=temp;
    }
    todoDeleted=null;
    size--;
    return returnData;
  }

  public Object removeLast(){
    return remove(size-1);
  }

  public int size(){
    return size;
  }

  public Object get(int index){
    Node temp=node(index);
    return temp.data;
  }

  public int indexOf(Object data){
    Node temp=head;
    int index=0;
    while(temp.data!=data){
      temp=temp.next;
      index++;
      if(temp==null){
        return -1;
      }
    }
    return index;
  }

  
}

public class Main{
  public static void main(String[] args){
   LinkedList numbers=new LinkedList();
    numbers.addFirst(30);
    numbers.addLast(10);
    System.out.println(numbers.node(0));
    numbers.add(1,15);
    System.out.println(numbers);//[30, 15, 10]
    System.out.println(numbers.removeFirst());
    System.out.println(numbers);//[15, 10]
    System.out.println(numbers.remove(0));
    System.out.println(numbers);//[10]
    System.out.println(numbers.size());//1
    System.out.println(numbers.get(0));//10
    System.out.println(numbers.indexOf(10));//0
    numbers.addLast(20);
    numbers.addLast(30);
    
    
  }
}

๋‚ด์žฅ๋œ LinkedList ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

import java.util.LinkedList;
import java.util.Iterator;

class Main {
  public static void main(String[] args) {
    LinkedList<String> cars=new LinkedList<>();
    cars.addFirst("Volvo");
    cars.addLast("BMW");
    cars.add(1,"Ford");

    for(String c:cars){
        System.out.print(c+" ");//Volvo Ford BMW
    }

    System.out.println();

    Iterator it=cars.iterator();
    while(it.hasNext()){
        String c=(String)it.next();
        System.out.print(c+" ");//Volvo Ford BMW
    }
  }
}

cf.

java.util ํŒจํ‚ค์ง€ : Java์˜ java.util ํŒจํ‚ค์ง€(Package)๋Š” Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์œ ์šฉํ•œ ํด๋ž˜์Šค๋“ค์„ ๋ชจ์•„๋‘” ๊ฒƒ์œผ๋กœ ๋Œ€ํ‘œ์ ์ธ ํด๋ž˜์Šค๋กœ๋Š” ๋‚ ์งœ์™€ ๊ด€๋ จ๋œ Date, Calendar ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๊ด€๋ จ๋œ Collection ํ”„๋ ˆ์ž„์›Œํฌ ๊ด€๋ จ ํด๋ž˜์Šค๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

java.util ํŒจํ‚ค์ง€ ํฌํ•จ๋˜๋Š” ํด๋ž˜์Šค๋“ค : 

AbstractCollection, AbstractList, AbstractSequentialList, LinkedList, ArrayList, Vector, Stack, AbstractSet, HashSet, LinkedHashSet, TreeSet, AbstractMap, HashMap, LinkedHashMap, TreeMap, Arrays, BitSet, Calendar, GregorianCalendar, Collection, Date, Dictionary, Hashtable, Properties, EventObject, Locale, Observable, Random, Scanner, StringTokenizer

 

 

Java - ์ธ์ฝ”๋ค, ์ƒ๋ฌผ์ •๋ณด ์ „๋ฌธ์œ„ํ‚ค

#JAVA

www.incodom.kr

 

์ฐธ๊ณ )

https://gangnam-americano.tistory.com/41

https://crazykim2.tistory.com/566