이번 시간에는 ArrayList의 remove에 대해 알아보겠습니다. remove를 보시면, int형을 받는 것이 있고, Object를 받는 것이 있습니다. int를 wrapping한 것은 Integer입니다. auto boxing까지 생각한다면 이 둘이 헷갈릴 소지가 매우 다분합니다. 특히 Integer는 스택 오버플로우에도 꽤 많이 올라왔던 질문 중 하나였습니다. 이 기회에 정리를 해 두시는 것도 괜찮겠습니다. 먼저 Object를 받는 remove를 알아보겠습니다. 먼저, Obj를 하나 생성하였습니다. 여기에는 equals가 재정의 되어 있지 않습니다. 저는 여기에서, "gahui"가 들어간 오브젝트를 새로 생성하였습니다. 그리고, 새롭게 생성한 "gahui" 라는 오브젝트를 li에서 제거할 건데요...
레퍼런스 검색 결과
처음 백준을 하시다 보면, 출력하실 때, 개행을 출력하기 위해서 endl을 많이 쓰는 실수를 합니다. 이게 어떤 문제가 있는지 공식 문서를 하나 하나 해석해 보면서 알아보겠습니다. 먼저 링크를 보시면 아래 문구가 눈에 보입니다. 개행을 stream에 insert를 한 다음에, stream을 flush 한다고 해석할 수 있습니다. 그러면, 이게 얼마나 시간을 많이 먹는 작업일까요? 간단하게 테스트 프로그램을 하나 만들어 보겠습니다. 123이라는 문자열을 2000만번 출력하는 프로그램입니다. 그리고, 이 작업을 하기 전에 시간을, 한 후에 시간을 출력함을 알 수 있는데요. 간단하게 시간을 측정하기 위해서, 이 방법도 나름 쓸만합니다. 저는 ex를 실행시켜서 출력된 결과를 1.txt에 넣겠습니다. 그리고, 1..
java의 hashset은 어떻게 동작할까요? hashmap과 다른 점은 map은 Key로부터 Value를 뽑아올 수 있지만, set은 Key값만을 중요하게 여긴다는 것입니다. 그런데, 뭔가 이상하지 않나요? HashMap하고, Set은 그것 말고는 거의 동일한 기능을 수행합니다. 상식적으로 생각해 보았을 때, HashSet 기능들을 일일히 다 구현을 하는 게 효율적일까요? 아니면 이미 구현된 HashMap의 기능을 이용하는 게 효율적일까요? 후자일 겁니다. 이 정도만 이해하셨다면, 이 글의 90%를 이해하신 겁니다. 나머지 10%는 밑에서 후술하도록 하겠습니다. 예제 프로그램을 보겠습니다. 간단하게 HashSet hs를 선언했습니다. 이것은 Integer를 Key로 가지는 자료 구조입니다. 안에 필드를..
System.gc 함수를 쓰지 말라는 이야기는 많이 듣곤 합니다. 왜 그럴까요? 예제 프로그램을 보겠습니다. class A가 있고, 이 클래스 내부에는 finalize가 오버라이딩 되어 있습니다. 이 메서드 안에 들어오면 shared.count가 하나 증가합니다. 정리를 하면, 객체 A가 정리가 되면, shared 클래스 내부에 있는 클래스 변수인 count가 하나 증가합니다. 그리고 class A 안에는 int형 배열 10개가 있습니다. 이제 Main 클래스의 main 메소드를 보겠습니다. 크게 어려운 것은 없어 보입니다. 10개의 객체 A 참조값을 저장할 수 있는 배열을 선언합니다. 그리고, 2만번의 loop를 돌 때 마다, 배열 A에 새로운 A의 참조값 10개를 넣습니다. 이를 그림으로 표현하면 위..
String 클래스의 replaceAll 메서드는 상당히 많이 쓰는 메서드 중 하나입니다. 이것의 성능 문제에 대해서는, 이미 다른 곳에서도 많이 언급이 되기도 했습니다. 만.. 한 번 더 짚고 넘어가셔도 좋을 듯 싶습니다. 사실 제대로 분석하시려면 컴파일러나 프로그래밍 언어론을 보시는 게 도움이 많이 될 겁니다. replaceAll 메소드는 크게 어려운 게 없습니다. 단지, regex 패턴을 찾으면, 그것을 replacement로 대체합니다. 예를 들자면, 숫자를 없애기 위해서는 regex에 "[0-9]"를, replacement에 ""을 넣으면 됩니다. 내부를 보겠습니다. 보면, Parrern.compile(regex).matcher(this).replaceAll(replacement); 이 문장이 ..
최근댓글