자바어로 "캐노컬 형식" 또는 "캐노컬 표현"이라는 용어는 무엇을 의미합니까?
나는 이 용어가 사용되는 것을 자주 들었지만, 실제로 그것을 이해한 적은 없다.
어떤 의미이며, 어떤 사람이 몇 가지 예를 들어 링크에 대해 알려주실 수 있습니까?
EDIT: 회신해 주셔서 감사합니다.또한 Effective Java에서 기술된 바와 같이 표준 표현이 equals() 퍼포먼스에 어떻게 도움이 되는지 알려 주시겠습니까?
규범에는 형식과 인스턴스라는 두 가지 용도가 있다고 생각합니다.
표준형식은 특정 자원의 가치가 여러 가지 방법으로 기술되거나 표현될 수 있다는 것을 의미하며, 그 중 하나는 선호하는 표준형식으로 선택된다(그 형태는 성경으로 만든 책처럼 성화되고 다른 형태는 그렇지 않다).표준 형식의 전형적인 예는 계층 파일 시스템의 경로입니다. 여기서 단일 파일은 여러 가지 방법으로 참조할 수 있습니다.
myFile.txt # in current working dir
../conf/myFile.txt # relative to the CWD
/apps/tomcat/conf/myFile.txt # absolute path using symbolic links
/u1/local/apps/tomcat-5.5.1/conf/myFile.txt # absolute path with no symlinks
이 파일의 표준 표현에 대한 고전적인 정의는 마지막 경로가 됩니다.로컬 경로 또는 상대 경로에서는 컨텍스트 정보가 없으면 리소스를 글로벌하게 식별할 수 없습니다.절대 경로를 사용하면 리소스를 식별할 수 있지만 두 경로가 동일한 엔티티를 참조하는지 여부는 알 수 없습니다.둘 이상의 경로가 표준 형식으로 변환되면 위의 모든 작업을 수행할 수 있습니다.또, 2개의 리소스가 같은지 아닌지를 판별할 수 있습니다(에일리어스 문제의 해결).
리소스의 표준 형식은 특정 형식 자체의 품질이 아닙니다. 파일 경로와 같은 특정 유형에 대해 여러 개의 가능한 표준 형식이 있을 수 있습니다(예: 가능한 모든 절대 경로 중 사전적 우선).하나의 형식은 특정 애플리케이션 이유로 표준 형식으로 선택되거나 모든 사람이 같은 언어를 사용할 수 있도록 임의로 선택될 수 있습니다.
오브젝트를 표준 인스턴스로 강제하는 것은 동일한 기본 아이디어이지만 자원의 "최상의" 표현을 결정하는 대신 표준 참조와 동일한 "콘텐츠"를 가진 인스턴스 클래스의 인스턴스를 임의로 선택한 다음 모든 참조를 동등한 개체로 변환하여 하나의 표준 인스턴스를 사용합니다.
이는 시간과 공간을 모두 최적화하는 기술로 사용할 수 있습니다.프로그램에 개 해당 가 모두 각할 수 및 할 수 있습니다. 을 개체(예: 개체 등가)가 ID할 수 . 프로그램에 동일한 개체의 인스턴스가 여러 개 있는 경우, 이러한 인스턴스를 모두 특정 값의 단일 표준 인스턴스로 강제 해결하면 각 값을 제외하고 모두 제거할 수 있으므로 공간 및 시간을 절약할 수 있습니다. 이러한 값을 개체 등가가 아닌 참조 ID(==)와 비교할 수 있습니다.equals()
★★★★★★★★★★★★★★★★★★」
표준 인스턴스로 성능을 최적화하는 전형적인 예로는 동일한 내용을 가진 문자열을 접는 것이 있습니다. " "String.intern()
동일한 문자 시퀀스를 가진 두 문자열의 경우 해당 텍스트에 대해 동일한 표준 String 개체를 반환할 수 있습니다.을 이 을 알 수 는 에일리어스입니다.
Java 5.0+의 열거형은 값이 직렬화 및 역직렬화된 경우에도 특정 열거 값의 모든 인스턴스가 VM 내에서 동일한 표준 인스턴스를 사용하도록 강제합니다. that that that를 할 수 있습니다.if (day == Days.SUNDAY)
만약의 경우 처벌받지 않고Days
는 열거형입니다.당신의 수업을 위해 이것을 하는 것은 확실히 가능하지만, 주의하세요.자세한 내용과 조언은 Josh Bloch의 Effective Java를 읽어보십시오.
위키피디아는 정규화라는 용어를 언급하고 있다.
둘 이상의 표현이 가능한 데이터를 "표준" 표준 표현으로 변환하는 프로세스입니다.이는 동등성에 대한 다양한 표현을 비교하고, 구별되는 데이터 구조의 수를 카운트하고, 반복 계산을 제거하여 다양한 알고리즘의 효율성을 개선하거나, 의미 있는 정렬 순서를 적용할 수 있도록 하기 위해 수행할 수 있습니다.
Unicode의 예는 나에게 가장 의미가 있었다.
Unicode 표준의 가변 길이 부호화(특히 UTF-8)에는, 대부분의 일반적인 문자에 대해서 복수의 부호화가 가능합니다.각 문자열 문자의 가능한 모든 인코딩을 고려해야 하므로 문자열 검증은 더욱 복잡해집니다.모든 문자 인코딩을 고려하지 않는 소프트웨어 구현에서는 애플리케이션 설계에서 비활성 문자열이 받아들여질 위험이 있으며 이로 인해 버그가 발생하거나 공격이 발생할 수 있습니다.해결책은 각 문자에 대해 단일 인코딩을 허용하는 것입니다.표준화는 모든 문자열 문자를 허용되는 단일 인코딩으로 변환하는 프로세스입니다.다른 방법으로는 소프트웨어가 문자열이 정규화되었는지 여부를 판별한 후 정규화되지 않은 경우 이를 거부하는 방법이 있습니다.이 경우 클라이언트/서버 컨텍스트에서 정규화는 클라이언트의 책임입니다.
요약하면 데이터의 표준 표현 형식입니다.이 양식에서 필요한 모든 표현으로 변환할 수 있습니다.
"표준 형식/표현"을 이해하기 위한 좋은 예는 "부울"의 XML 스키마 데이터 유형 정의를 살펴보는 것입니다.
- 부울의 "렉시컬 표현"은 다음 중 하나가 될 수 있습니다.
{true, false, 1, 0}
반면에. - '표현'은 다음 중 하나일 수 있습니다.
{true, false}
이는 본질적으로
"true"
그리고."1"
정규 대표에게 매핑됩니다."true"
그리고."false"
그리고."0"
법정 재판관에 임명되다"false"
부울에 대한 w3 XML 스키마 데이터 유형 정의 참조
"canonical"이라는 단어는 "standard" 또는 "usual"의 동의어일 뿐입니다.자바 고유의 의미는 없다.
일반성을 잃지 않고 가장 단순하고 중요한 형태로 환원되는
그것을 기억하는 쉬운 방법은 신학계에서 "규범적"이 사용되는 방식이고, 표준적 진실은 진짜 진실이기 때문에 만약 두 사람이 그것을 발견한다면 그들은 같은 진실을 발견한 것이다.표준 인스턴스도 마찬가지입니다.그 중 2개를 찾았다고 생각되는 경우(즉,a.equals(b)
(즉, 1개밖에 없어요.a == b
) 즉, 표준 객체의 경우 동등성은 동일성을 의미합니다.
이제 비교를 해보겠습니다.이제 다음 중 하나를 사용할 수 있습니다.a==b
또는 a.equals(b)
표준 인스턴스의 경우 동일한 답변을 생성하지만 a==b는 참조의 비교입니다(JVM은 두 개의 32비트 패턴에 불과하므로 매우 빠르게 두 숫자를 비교할 수 있습니다).a.equals(b)
메서드 콜이며 오버헤드가 증가합니다.
다른 좋은 예로는 데카르트(x, y, z), 구면(r, theta, phi) 및 원통 좌표(r, phi, z)의 사용을 지원하는 클래스가 있습니다.평등(균등법)을 확립하기 위해, 모든 표현을, 예를 들어 구면 좌표와 같은 하나의 "표준" 표현으로 변환하는 것이 좋습니다(또는 일반적으로 하나의 내부 표현 사용).나는 전문가는 아니지만, 이것은 아마도 좋은 구체적인 예로 생각되었다.
표준 형식은 요소의 자연 고유 표현을 의미합니다.
표준 표현이란 문자를 다른 스타일로 표시하는 것을 의미합니다.예를 들어, 내가 문자를 쓰는 경우 A는 다른 사람이 다른 스타일로 쓸 수 있음을 의미합니다.
이는 광학 문자 인식 필드에 따른 것입니다.
표준 형식에 대한 OP의 질문 및 표준 형식이 어떻게 성능을 개선할 수 있는 방법equals
유효한 Java에서 제공되는 예를 확장함으로써 두 가지 모두에 응답할 수 있습니다.
다음 클래스를 고려합니다.
public final class CaseInsensitiveString {
private final String s;
public CaseInsensitiveString(String s) {
this.s = Objects.requireNonNull(s);
}
@Override
public boolean equals(Object o) {
return o instanceof CaseInsensitiveString && ((CaseInsensitiveString) o).s.equalsIgnoreCase(s);
}
}
equals
는 '비밀번호'를 사용하여 하였습니다.String
의 »equalsIgnoreCase
되어 있는 와 같이
필드의 표준 형식을 저장하여 동일한 방법이 더 많은 비용이 드는 비표준 비교보다 표준 형식에 대해 저렴하게 정확한 비교를 수행할 수 있도록 할 수 있습니다.
조슈아 블로크가 정준형식을 말하는 건 무슨 뜻이죠?도날씨의 간결한 답변이 매우 적절하다고 생각합니다.기본 데이터를 저장할 수 있습니다.String
의 CaseInsensitiveString
표준적인 방법의 예, 아마도 대문자 형식일 것입니다.String
이제 이 표준 형식을 참조할 수 있습니다.CaseInsensitiveString
및합니다.equals
★★★★★★★★★★★★★★★★★」hashcode
★★★★★★★★★★★★★★★★★★.
RDBMS, RDBMS
RDBMS는 "RDBMS"를 "RDBMS는 "RDBMS"입니다.같은 데이터가 다른 테이블에 존재하고 하나의 식별자로 표현되며 다른 테이블에 매핑됩니다.
or or or openicle.
그래프 데이터베이스의 단일 데이터 형식이 여러 세 배로 표현된다고 가정해 보십시오.
이 방법의 주요 장점은 DML(데이터 조작)을 보다 효율적으로 할 수 있다는 것입니다.이는 다수의 값이 아닌 하나의 값만 업소트(삽입/업데이트)할 수 있기 때문입니다.
언급URL : https://stackoverflow.com/questions/280107/what-does-the-term-canonical-form-or-canonical-representation-in-java-mean
'programing' 카테고리의 다른 글
MySQL에서 피벗 테이블 출력을 반환하려면 어떻게 해야 합니까? (0) | 2022.10.02 |
---|---|
typescript - 복제 개체 (0) | 2022.10.02 |
표의 모든 열을 나열하려면 어떻게 해야 합니까? (0) | 2022.10.02 |
외부 키 제약 조건에 사용된 열을 변경할 수 없습니다. (0) | 2022.10.02 |
외부 스코프에서 정의된 섀도우 이름의 문제는 무엇입니까? (0) | 2022.10.02 |