본문 바로가기
Back-End/Java

TIL 230522 : toString()은 대괄호를 포함한 배열인 척하는 문자열이었다.

by 우인입니다 2023. 5. 22.

24.09.04 추가

지금 다시보니 참 아무것도 모르던 시절의 것으로 가득한 포스팅입니다.
이후에 또 지금 모르던 것을 발견할지도 모르겠습니다만, 우선 다시 읽어보며 내용을 추가해봅니다.

 

https://thiswooin.tistory.com/152

 

List객체를 toString()하게 되면 일어나는 일

https://thiswooin.tistory.com/9 TIL 230522 : toString()은 대괄호를 포함한 배열인 척하는 문자열이었다.향상된 for문으로 전체 출력을 해보려 했다. 오류 발생. for-each문에서는 배열이나 Iterable이 필요하다는

thiswooin.tistory.com

 

 

 

 

 


기존글

향상된 for문으로 전체 출력을 해보려 했다.

 

오류 발생. for-each문에서는 배열이나 Iterable이 필요하다는 뜻 같다.

 

 

 

배열이 맞지않나?라는 생각으로 두가지로 출력해봤다.

 

배열 모양이 맞는 것 같았다.

 

일반 배열을 만들어서 배열을 출력해봤을 때, 생각해보면 대괄호로 묶여서 출력되는게 아니라 참조주소값이 적혀나왔던 것 같다.

 

 결론적으로 toString은 그냥 대괄호를 포함해서 보기 좋게 문자열로 바꿔주는 매소드가 아닌가 싶다.

 

 

배열이 아니라면 stringList[0] 이 오류가 나지않을까 확인했다.

배열이 필요하다는 메시지를 확인했다.

 


 

+콜렉션이라는 개념을 처음 들었다.

복잡하고 낯설다. 빨리 친해져야지.

 

컬렉션 기능 : 크기를 자동조정.

종류 : List, Stack, Set, Queue, Map

 

List (ArrayList)

 : 순서가 있는 데이터의 집합 (Array와 유사)

 : 길이를 몰라도 생성 가능. (Array는 불가. 정적 배열임 / List는 동적배열. 크기가 가변적)

 : 순서대로 Index값 부여받음. 처음들어간게 0

 

 선언방식 : ArrayList<Integer> intList = new ArrayList<>();

         <> 안에 데이터타입을 Wrapper 형태로 넣어줌.

 

  • 생성 : new ArrayList<Integer>(); 형태로 생성합니다.
  • 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없습니다.
  • 값 추가 : intList.add({추가할 값}) 형태로 값을 추가합니다.
  • 값 수정 : intList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
  • 값 삭제 : intList.remove({삭제할 순번}) 형태로 값을 삭제합니다.
  • 전체 출력 : intList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
  • 전체 제거 : intList.clear() 형태로 전체 값을 삭제합니다.

 

 

LinkedList

 : 메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장합니다.

 : 나누어 담기 때문에 전체 조회는 느림. 중간에 추가하거나 삭제시에는 빠름.

 

  • 선언 : LinkedList<Integer> linkedList 형태로 선언합니다.
  • 생성 : new LinkedList<Integer>(); 형태로 생성합니다.
  • 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없습니다.
  • 값 추가 : linkedList.add({추가할 값}) 형태로 값을 추가합니다.
  • 값 중간에 추가 : linkedList.add({추가할 순번}, {추가할 값}) 형태로 값을 중간에 추가합니다.
  • 값 수정 : linkedList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
  • 값 삭제 : linkedList.remove({삭제할 순번}) 형태로 값을 삭제합니다.
  • 전체 출력 : linkedList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
  • 전체 제거 : linkedList.clear() 형태로 전체 값을 삭제합니다.

 

 

Stack

 : 이름에서 알 수 있듯 바구니 안에 쌓아 담는 느낌.

 : 가장 먼저 들어간 자료가 마지막에 나온다. (맨 밑에 쌓여있어서. ArrayList와 반대)

 

  • 선언 : Stack<Integer> intStack 형태로 선언합니다.
  • 생성 : new Stack<Integer>(); 형태로 생성합니다.
  • 추가 : intStack.push({추가할 값}) 형태로 값을 추가합니다.
  • 조회 : intStack.peek() 형태로 맨 위값을 조회합니다.
  • 꺼내기 : intStack.pop() 형태로 맨 위값을 꺼냅니다. (꺼내고나면 삭제됨)

 

Queue

 : 원통처럼 뚜껑에 넣어두면 아래 출구로 빠지는 느낌.

 : First In First Out : 먼저들어간 순서대로 값을 조회할 수 있다.

Queue<Integer> intQueue = new LinkedList<Integer>();
  • 선언 : Queue<Integer> intQueue 형태로 선언합니다.
  • 생성 : new LinkedList<Integer>(); 형태로 생성합니다.
  • 추가 : intQueue.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
  • 조회 : intQueue.peek() 형태로 맨 아래값을 조회합니다.
  • 꺼내기 : intQueue.poll() 형태로 맨 아래값을 꺼냅니다. (꺼내고나면 삭제됨)

 

Set

 : 집합과 비슷. (순서 상관 없음)

 : 중복 안됨!

Set<Integer> intSet = new HashSet<Integer>();
//HashSet을 통해서 생성가능. Set은 인터페이스 -> 생성자가 없음.
  • 선언 : Set<Integer> intSet 형태로 선언합니다.
  • 생성 : new HashSet<Integer>(); 형태로 생성합니다.
  • 추가 : intSet.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
  • 조회 : intSet.get({초회할 순번}) 형태로 순번에 있는 값을 조회합니다.
  • 삭제 : intSet.remove({삭제할 값}) 형태로 삭제할 값을 직접 지정합니다.
  • 포함확인 : intSet.contains({포함확인 할 값}) 형태로 해당값이 포함되어있는지 boolean 값으로 응답 받습니다.

 

Map

 : 키-값 쌍형태. 키는 Unique. 키가 중복되면 안됨.

Map<String, Integer> intMap = new HashMap<>(); // 선언 및 생성
  • 선언 : Map<String, Integer> intMap 형태로 Key타입과 Value타입을 지정해서 선언합니다.
  • 생성 : new HashMap<>(); 형태로 생성합니다.
  • 추가 : intMap.put({추가할 Key값},{추가할 Value값}) 형태로 Key에 Value값을 추가합니다.
  • 조회 : intMap.get({조회할 Key값}) 형태로 Key에 있는 Value값을 조회합니다.
  • 전체 key 조회 : intMap.keySet() 형태로 전체 key 값들을 조회합니다.
  • 전체 value 조회 : intMap.values() 형태로 전체 value 값들을 조회합니다.
  • 삭제 : intMap.remove({삭제할 Key값}) 형태로 Key에 있는 Value값을 삭제합니다.