# comparable

57개의 포스트

Comparable , Comparator

목차 Comparable Comparator 들어가기 전에.. 둘은 객체를 비교할 수 있도록 만듦. (대개 정렬의 용도로) 인터페이스(interface)에 속하는 comparable과 Comparator 따라서 사용을 위해서는 인터페이스 내에 선언된 메소드를 '반드시 구현(Override)'해야함! 1. Comparable lang 패키지 내 존재(import 불필요) compareTo(T o) 자기 자신과 매개변수 객체를 비교 사용방법 2. Comparator util 패키지 내 존재(import 필요) compare(T o1, o2) 두 매개변수 객체를 비교 사용방법 주의 : Overflow가 발생할 여지가 있는지를 반드시 확인하고 사용! *Overflow : 연산 과정에서 자료형의 범위를 넘어서버림 출

2023년 9월 10일
·
0개의 댓글
·
post-thumbnail

[JAVA] Comparator 과 Comparable 인터페이스는 어떻게 사용해야할까?

학습배경 [우아한테크코스 프리코스] 로또 미션을 풀이해보며 찾아낸 학습 키워드 에서 언급했듯이, 로또 미션을 풀이했을때 학습해야할 키워드들을 많이 찾았었습니다. 그 중에서 Comparable , Comparator 에 대한 사용법을 잘 몰라서 코드에서 활용하지 못했었는데, 이번 기회에 제대로 학습해보고자 합니다. Comparator 와 Comparable 공통점 결론부터 말하자면, 둘의 공통점은 사용자 정의 클래스의 객체들을 비교할 수 있게 해주며, 위 인터페이스들을 구현한 사용자 정의 클래스의 객체들을 정렬하고 싶을때 임의의 정렬기준을 쉽게 정의할 수 있도록 도와주는 역할을 수행합니다. 자바 차원에서 제공해주는 일반 클래스(ex. Integer) 들과 달리, 사용자가 직접 정의한 클래스들의 객체들을 정렬하고 싶어

2023년 8월 30일
·
0개의 댓글
·
post-thumbnail

[구름톤 챌린지] 1주차 학습 일기 (2)

구름IDE 문제 문제 4~5 배운점 ✨ 1) ArrayList() 메소드 이번에 arraylist 메소드에 대해 자세히 알게 되었다. > 참고) ArrayList는 인덱스 기반의 데이터를 관리하고 있으며, 순서가 존재한다. 동적으로 크기가 변경될 수 있기 때문에데이터를 나누고, 정렬하고 합치는 문제에서는 적합한 자료형이다. ArrayList는 아래처럼 선언할 수 있고, 다음과 같은 메소드를 제공하고 있다. add(E e) : 리스트의 마지막에 원소를 추가 add(int index, E element) : 지정한 인덱스에 원소를 추가 remove(int index) : 지정한 인덱스의 원소를 삭제 get(int index) : 지정한 인덱스의 원소를 반환 set(int index, E element): 지정한 인덱스의 원소를 새 원소로 대체

2023년 8월 22일
·
0개의 댓글
·
post-thumbnail

Sort

Sort Primitive type Sorting Primitive type array의 sort는 Arrays.sort() 메소드를 사용한다. Arrays.sort()는 void 리턴을 가진다. `String.replaceOf("s", "a")는 String 객체를 리턴 기본적으로 오름차순으로 정렬된다. List의 Sorting Collection.sort()를 이용해서 오름차순으로 정렬 가능하다. Collection.revere()를 이용해서 내림차순으로 정렬 가능하다. Comparable Comparable을 사용하면 Collections.sort()에서 compareTo를 사용하여 정렬한다. Comparable은 다양한 정렬 조건을 적용하여 정렬하는 것은 무리가 있다. Comparator Integer list의 정렬 뒤

2023년 8월 13일
·
0개의 댓글
·

자바 - Comparable

코딩테스트에서 필요하다고 생각되는 이론 중 정렬 관련하여 comparable에 대해서 알아보겠습니다 데이터를 정렬할때 사용되는 방법은 Sort 와 Comparable 이 있습니다 Sort는 단일기준 Comparable은 정렬기준이 여러개 각각 사용됩니다 comparable Java에서 Comparable은 인터페이스로, 객체들 간의 순서를 정의하기 위해 사용됩니다. Comparable 인터페이스를 구현한 클래스는 "비교 가능"하다고 할 수 있으며, 해당 클래스의 객체들은 서로 비교할 수 있고 정렬할 수 있습니다. Comparable 인터페이스는 단일 메서드인 compareTo()를 정의합니다. 이 메서드는 비교 대상 객체와 비교하여 현재 객체가 작은지, 같은지, 또는 큰지를 나타내는 값을 반환합니다. compareTo() 메서드의 반환 값에 따라 객체들은 정렬될 수 있습니다. compareTo() 메서드의 구현은 일반적으로 다음 규칙에 따라 이루어집니다:

2023년 7월 6일
·
0개의 댓글
·
post-thumbnail

이펙티브 자바 3/E 3장 정리

아이템 10 (equals는 일반 규약을 지켜 재정의하라) equals 메서드는 재정의하기 까다롭다 다음은 equals를 재정의하지 않는 것이 좋은 상황이다. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는 게 아니라 동작하는 개체를 표현하는 클래스 ex) Thread 인스턴스의 논리적 동치성(logical equality)을 검사할 일이 없다. 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다. ex) set은 AbstracSet, List는 AbstractList, Map은 AbstractMap으로부터 상속받아 그대로 쓴다. 클래스가 private이거나 package-private이고 equals 메서드를 호출할 일이 없다. equals를 재정의해야 할 때 : 상위 클래스의 equals가 논리적 동치성을 비교하도록 재정의되지 않았을 때(주로 값

2023년 6월 27일
·
0개의 댓글
·
post-thumbnail

Comparable 과Comparator

Comparable 자기자신과매개변수객체를비교 - compareTo 메서드를 구현 Comparator 두개의매개변수객체를비교 - compare 메서드를 구현 정렬 메서드 compare()와 compareTo()는 두 객체의 비교 결과를 반환하도록 작성한다 - 같으면0,오른쪽이더크면음수,작으면양수 자바는 양수가 나오면 두 원소의 위치를 교환한다. Comparable 예시 Comparator 예시

2023년 6월 23일
·
0개의 댓글
·

자바의 정석 ch11-30~33 Comparator와 Comparable

Comparator와 Comparable 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스 Comparable : 기본 정렬 기준을 구현하는데 사용 Comparator : 기본 정렬 기준 외에 다른 기준으로 정렬하고자 할 때 사용 compare()와 compareTo()는 두 객체의 비교 결괄르 반환하도록 작성 같으면 0, 오른쪽이 크면 음수(-), 작으면 양수(+) 오름차순 일 때는 왼쪽값이 클 때 자리를 바꾸고, 내림차순 일 때는 오른쪽 값이 클 때 자리를 바꾼다. 예제 문자열의 기본 정렬 기준은 사전 기준 (대문자 먼저, abc순) '-1'을 곱하게 되면 음수는 양수로, 양수는 음수로 변하기 때문에 기존 결과의 역순으로 결과가 나온다. (아니면 자리를 바꾸면 됨) Integer와 Comparable 정렬 : 두 대상을 비교해서 자리 바꿈을 반복 (불변) 정렬 기준 : 가변 ex) 버블정렬

2023년 6월 15일
·
0개의 댓글
·
post-thumbnail

05.14

Iterator and Collection Tree ArrayList .size()로 리스트의 길이 측정 일반 배열과는 다르게 [] = "add"; 처럼 추가하는 것이 아닌 .add = ("add");로 추가하며 출력할때는 .get(indexnumber) 으로 받아와 출력하게된다. add 로 받는 값은 Object로 모든 값을 받아올수가 있다 그러므로 String value = al.get(i); 에서는 데이터 타입이 맞지않아서 오류가 나

2023년 5월 14일
·
0개의 댓글
·

java List/ Stack/ Arrays Comparator/ Comparable Iterator

List ArrayList(Vector) 요소를 삭제할 경우 삭제할 객체의 바로 아래에 있는 데이터를 한 칸씩 위로 복사해서 삭제할 객체를 덮어씐다. 마지막 데이터는 null로 변경한다. 그래서 맨 위의 데이터를 수정/삭제하는데 느리다. 추가도 이후 요소들을 모두 한칸 씩 이동시킨다. 크기를 변경할 수 없다. 내부적으로 새로운 배열을 생성해서 데이터를 복사한다. LinkedList 배열은 모든 데이터가 연속적으로 존재하지만 링크드 리스트는 불연속적으로 존재하는 데이터를 서로 연결한 형태이다. ![]

2023년 5월 9일
·
0개의 댓글
·
post-thumbnail

5. 자바 정렬 메서드 활용

1) sort() 흔히 프로그래밍 언어에서 정렬은 'stack'과 'queue'를 많이 들어보셨을 겁니다. 하지만 간단한 정렬이라도 직접 함수를 만들어 쓰기에는 어려움이 있습니다. 이를 개선하기 위해 Java에서는 sort()메서드가 java.util 패키지에 내장되어 있습니다. 해당 메서드의 사용방법에 대하여 정수가 담긴 배열과 컬렉션을 통해 말씀드려볼까 합니다. ![](https://velog.velc

2023년 5월 6일
·
0개의 댓글
·
post-thumbnail

[북스터디]이코테 그리디 기본 정리(ch3)(Java&Python)

주저리 이코테 책을 통한 개념 학습 보다 문제를 집중적으로 단권화 해서 접근하기 보다, 부분적으로 부족하고 필요하다고 생각해 왔던 부분만을 중심으로 정리하고 문제를 접근하고 해결하는 과정을 거치며 필요한 역량을 갖추었다고 생각했다. 하지만, 이러한 생각은 착각이었던 것 같다. 진짜 코테를 여럿 겪으며, 실질적인 개념이 차근차근 바르게 정립되어 있는 것과 더불어 수학 문제, 구현 문제 등 기본 개념의 정립이 필요하다는 생각을 하게 되었다. 이에 따라, 이코테의 개념과 문제를 빠르게 짚고 정리할 필요와 해당 책의 기본 개념에 나오지 않고 추후에 심화 문제에서도 나올 내용일지라도, 필요한 기본 개념으로 판단되는 내용들을 함께 정리하고자 한다. 특히, 그리디 알고리즘 문제의 개념은 분명 어렵지 않다. 어디든 적용해 볼 수 있다. 다만, 정합하지 않을 수 있다. 속도가 빠를 수는 있지만 최적해가 아닐 수 있으며, 유형화된 문제도 있는가 하면 실제 문제들을 구현과 정렬의

2023년 5월 6일
·
0개의 댓글
·
post-thumbnail

[JAVA] 자바의 정렬

배열과 리스트의 정렬 배열이나 Collection 프레임워크 등에서 sort() 를 사용하면 컴퓨터가 알아서 정렬을 해준다. 그 중 배열에서 sort()함수를 통해 정렬기능을 사용할 수 있다. 배열의 정렬 Arrays.sort() Arrays.sort() 여기서 사용되는 sort() 는 Comparable 구현에 의해 정렬된 것인데, 오름차순정렬이 디폴트이다. 내림차순 정렬로 수행하려면 이렇게 수행하면된다 Arrays.sort(str, Collections.reverseOrder()); 리스트의 정렬 Collections.sort() 아래서 정리할 건데 comparable or comparator 인터페이스를 사용하면된다 >배열과 리스트의 정렬 시간복잡도 비교 [따라서 A

2023년 4월 28일
·
0개의 댓글
·
post-thumbnail

[Effective Java] item14 - Comparable을 구현할지 고려하라

코딩을 하면서 값을 비교하는 경우는 굉장히 많다! 다양한 경우가 많은데 새로운 객체를 만들 때는 Comparable을 구현할지 고려해야 할 것이다. Comparable 인터페이스는 다음과 같이 생겼다. equals의 규약과 compareTo의 규약은 비슷하다. 객체의 순서를 비교하는데 객체가 주어진 객체보다 작으면 음의 정수를, 같으면 0을, 크면 양의 정수를 반환한다. 비교할 수 없는 객체가 주어지면 ClassCastException을 던진다. Comparable을 구현한 클래스는 모든 x, y에 대하여 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 여야 한다. Comparable을 구현한 클래스는 추이성을 보장해야 한다. 즉, x.compareTo(y) > 0, y.compareTo(z) > 0, x.compareTo(z) > 0 이다. Comparable을 구현한 클래스는 모든 z에 대해 x.compareTo

2023년 4월 19일
·
0개의 댓글
·
post-thumbnail

Java 정렬

자바에서 배열이나 리스트를 정렬할 때, sort() 메서드를 사용하여 간편하게 정렬할 수 있다. Arrays.sort() 자바의 데이터 타입은 Primitive Type(원시 타입)과 Reference Type(참조 타입)으로 구분할 수 있다. Primitive Type(원시 타입) 기본형(byte, char, short, int, long, float, dulble, boolean) 타입을 제공한다. default 값이 있으므로 Null이 존재하지 않는다. Stack(스택) 메모리에 실제 값을 저장한다. Reference Type(참조 타입) 원시 타입을 제외한 모든 타입을 말한다. 배열, 열거, 클래스, 인터페이스 타입이 참조 타입에 해당된다. Null이 존재한다.(빈 객체) Heap(힙) 메모리에 실제 값이 아닌 실제 값이 저장된 주소 값을 저장한다. 배열의 정렬 방법은 원시 타입과 참조 타입 각각 다르다. 참조 타입의 경우, Compa

2023년 3월 29일
·
0개의 댓글
·
post-thumbnail

[Java] Comparable & Comparator

기본형 비교 primitive 타입의 실수 변수(byte, short, int, double 등등..)의 경우 부등호를 이용해 비교할 수 있다. 참조형 비교 그럼 이 객체들은 어떻게 비교하지? 이름순? 나이순? 무엇을 비교 해야하지? 비교 하는 방법은 서비스마다 다르다. 즉, 이런 referecne 타입들을 비교하기 위해서 Comparable과 Comparator가 존재한다. Comparable & Comparator 특징 우선 둘다 인터페이스다. 그럼 뭐가 다를까? Comparable public int compareTo(T o)를 구현해야 한다. compareTo 메서드 하나 밖에 없다. (this 객체)와 (T o)를 비교 한다. Comparator int compare(T o1, T o2)를 구현해야 한다. ![](https://velog.velcdn.com/im

2023년 3월 28일
·
0개의 댓글
·

[C#] IComparable and IComparer

Introduction int, float 등과 같은 primitive type은 기본적으로 비교 연산자가 지원 된다. 하지만 사용자가 정의한 타입에 대해서 비교 연산을 하고 싶다면 어떻게 해야 할까? 이에 대해서는 클래스에 자체적인 비교 메소드를 넣어주거나 할 수 있다. 하지만 단순히 비교 연산 메소드를 구현하는 것만으로는 표준 라이브러리에 비교 연산자를 넘겨줘야 하는 경우엔 사용 할 수가 없다. 그럴 때 사용하는 것이 IComparer, IComparable 인터페이스다. 2개의 각각 인터페이스는 서로 같아보이지만, 사용에 있어서 차이가 존재한다. 각 인터페이스의 차이에 대해서는 예제를 보면서 천천히 살펴보도록 하자. IComparable IComparable의 소스 코드는 다음과 같다. 반환값이 정수로 되어 있는데, 비교 결과를 음수, 양수, 0으로 나누어서 반환한다. 비교 대상이 되는 파라미터 값과 비교해봤을 때

2023년 3월 19일
·
0개의 댓글
·
post-thumbnail

[Java] CollectionAPI 와 Comparable vs Comparator

데이터를 저장하는 방법 1) 변수 : 한가지 타입에 한가지 값만 저장 2) 배열 : 한가지 타입에 여러개의 값을 저장 데이터조작에 불편하다(삽입, 삭제, 수정,검색) 배열은 사이즈가 변경될수 없다!! 자료구조 : 데이터를 저장하는 구조, Collection Framework import java.util.* ; 제공 객체만 저장가능하고 다양한 데이터타입 저장 가능. 자료구조 공간의 크기가 늘어난다 데이터를 저장하는 방식에 따라 이미 필요한 객체나 interface를 만들어서 풍부하게 제공을 한다. 사용자인 우리는 만들어 놓은 객체 또는 interface 를 가져다 사용하면 데이터조작을 손쉽게 할수 있다.(ex) 등록, 수정, 삭제, 검색......) : 제공된 메소드를 최대한 이용하여 작성하면 코딩은 간결하고 하는일 더 많이 할수 있다 제공되는 interface : 각 인터페이스들의 구현클래스 제공 1)

2023년 3월 8일
·
0개의 댓글
·

Comparable과 Comparator

스스로 공부한 내용을 기록한 포스트로 틀린 부분이 있을 수 있으니 오류를 확인해보시고 적용하시길 강력히 당부드립니다. > https://st-lab.tistory.com/243 를 참고하여 작성한 포스트입니다. 포스트의 시작 지점 알고리즘 문제를 풀다보면 정수들을 정렬해야하는 경우가 있다. primitive type인 로 선언된 정수들은 로, wrapper class인 로 선언된 정수들은 로 손쉽게 오름차순으로 정렬할 수 있다. 내림차순의 경우 로 정렬할 수 있는데 이것은 wrapper class인 경우만 가능하다. 따라서 배열을 내림차순으로 정렬하고 싶은 경우 가 아닌 로 선언해주어야 한다. 문제 제기 하지만 사용자가 임의로 선언한 객체를 원하는 기준으로 정렬하고 싶은 경우는 단순히 sort()를 사용할 수 없다. 이런 경우 자바에서 제공하는 혹은 인터페이스를 활용하여 객체를 정렬할 수 있다. 인터페이스는 특정 메서드의 구현을 강제하는 속성이

2023년 2월 22일
·
0개의 댓글
·
post-thumbnail

[JAVA] 정렬 및 비교

서론 라는 언어를 다루면서 같은 자료형, 다른 자료형, 객체 등 다양한 정렬과 비교를 하게된다. 최근 알고리즘을 풀면서 정렬과 비교를 많이 사용하고 있지만 헷갈리는 부분이 있어 코드 예제를 통해 간단히 정리해보려고 한다. > ## 예제 클래스 아래의 클래스는 본 글에서 사용할 간단한 예제 클래스입니다. People.java Test.java 1. 비교 equals() (Reference Type 비교) 문자열을 비롯한 참조 타입을 비교할 때 사용하는 equlas()의 경우 메서드 형태이며 사용시 참조 타입이 가르키는 값을 비교할 때 사용한다. == (Primitive Type 비교) ==는 자바에서 기본적으로 제공하는 연산자 중 하나이며 기본 자료형을 비교할 때는 값을, 참조 자료형을 비교할 때는 주소값을 비교한다.

2023년 2월 1일
·
4개의 댓글
·