Charsequence android что это

Charsequence android что это

This interface does not refine the general contracts of the equals and hashCode methods. The result of comparing two objects that implement CharSequence is therefore, in general, undefined. Each object may be implemented by a different class, and there is no guarantee that each class will be capable of testing its instances for equality with those of the other. It is therefore inappropriate to use arbitrary CharSequence instances as elements in a set or as keys in a map.

Method Summary

All Methods Instance Methods Abstract Methods Default Methods
Modifier and Type Method and Description
char charAt (int index)

Method Detail

length

charAt

If the char value specified by the index is a surrogate, the surrogate value is returned.

subSequence

toString

chars

If the sequence is mutated while the stream is being read, the result is undefined.

codePoints

If the sequence is mutated while the stream is being read, the result is undefined.

  • Summary:
  • Nested |
  • Field |
  • Constr |
  • Method
  • Detail:
  • Field |
  • Constr |
  • Method

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2021, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Источник

CharSequence против строки в Java?

программирование в Android, большинство текстовых значений ожидается в CharSequence .

почему это? В чем преимущество, и каковы основные последствия использования CharSequence над String ?

каковы основные различия и какие проблемы ожидаются при их использовании и преобразовании из одного в другой?

9 ответов

строки являются CharSequences, Так что вы можете просто использовать строки и не беспокоиться. Android просто пытается быть полезным, позволяя вам также указывать другие объекты CharSequence, такие как StringBuffers.

эта диаграмма классов может помочь вам увидеть общую картину строковых типов в Java 7/8. Я не уверен, что все они присутствуют в Android, но общий контекст все еще может оказаться полезным для вас.

кроме того, обратите внимание на комментарии по принято отвечать. The CharSequence интерфейс был модифицирован на существующие структуры классов, поэтому есть некоторые важные тонкости ( equals() & hashCode() ). Обратите внимание на различные версии Java (1, 2, 4 & 5) с метками на классы / интерфейсы-довольно много оттока на протяжении многих лет. В идеале CharSequence было бы с самого начала, но такова жизнь.

Я считаю, что лучше всего использовать CharSequence. Причина в том, что String реализует CharSequence, поэтому вы можете передать строку в CharSequence, однако вы не можете передать CharSequence в строку, поскольку CharSequence не реализует String. Кроме того, в Android EditText.getText() метод возвращает редактируемый, который также реализует CharSequence и может быть легко передан в один, а не в строку. CharSequence обрабатывает все!

в целом использование интерфейса позволяет варьировать реализацию с минимальным сопутствующим ущербом. Хотя java.ленг.Строка очень популярна возможно, что в определенных контекстах может потребоваться использовать другую реализацию. Создавая API вокруг CharSequences, а не строк, код дает возможность сделать это.

Это почти наверняка из соображений производительности. Например, представьте себе парсер, который проходит через 500k ByteBuffer, содержащий строки.

существует 3 подхода к возвращению содержимого строки:

создайте строку[] во время синтаксического анализа, по одному символу за раз. Это займет заметное количество времени. Мы можем использовать == вместо .равно для сравнения кэшированных ссылок.

создайте int[] с смещениями во время синтаксического анализа, затем динамически строить строку, когда get() происходит. Каждая строка будет новым объектом, поэтому нет кэширования возвращаемых значений и использования ==

построить CharSequence[] во время разбора. Поскольку новые данные не сохраняются (кроме смещений в байтовый буфер), синтаксический анализ намного ниже, чем #1. В get time нам не нужно создавать строку, поэтому производительность get равна #1 (намного лучше, чем #2), так как мы возвращаем только ссылку на существующий объект.

In в дополнение к преимуществам обработки, которые вы получаете с помощью CharSequence, вы также уменьшаете объем памяти, не дублируя данные. Например, если у вас есть буфер, содержащий 3 абзаца текста, и вы хотите вернуть все 3 или один абзац, вам нужно 4 строки, чтобы представить это. При использовании CharSequence требуется только 1 буфер с данными и 4 экземпляра реализации CharSequence, отслеживающей начало и длину.

Источник

Точная разница между CharSequence и String в java [дубликат]

этот вопрос уже есть ответ здесь:

  • CharSequence против строки в Java? 9 ответов
  • почему StringBuilder, когда есть строка? 10 ответов
  • выбор между CharSequence и String для API [дубликат] 1 ответ

Я прочитал это предыдущий пост. Может ли кто-нибудь сказать, какая точная разница между CharSequence и строка, кроме того, что String осуществляет CharSequence и String — это последовательность символов? Для пример:

что происходит, когда «привет» назначен obj и снова str ?

8 ответов

общие различия

есть несколько классов, которые реализуют CharSequence интерфейс кроме String . Среди них

  • StringBuilder для последовательностей символов переменной длины, которые могут быть изменены
  • CharBuffer для фиксированной длины низкоуровневых последовательностей символов, которые могут быть изменены

любой метод, который принимает CharSequence может работать на все это одинаково хорошо. Любой метод, который принимает только String потребует преобразования. Итак, используя CharSequence как тип аргумента во всех местах, где вы не заботитесь о внутренних органах, разумно. Однако, вы должны использовать String как тип возврата, если вы фактически возвращаете String , потому что это позволяет избежать возможных преобразований возвращаемых значений, если вызывающий метод действительно требует String .

Также обратите внимание, что карты должны использовать String как тип ключа, а не CharSequence , как карта ключи не должны меняться. Другими словами, иногда неизменная природа String имеет важное значение.

конкретный фрагмент кода

что касается кода, который вы вставили: просто скомпилируйте его и посмотрите на байт-код JVM, используя javap -v . Там вы заметите, что оба obj и str являются ссылками на один и тот же постоянный объект. Как String является неизменным, этот вид обмена в порядке.

на + оператор String компилируется как призывы различных StringBuilder.append звонки. Таким образом, это эквивалентно

я должен признаться, я немного удивлен, что мой компилятор javac 1.6.0_33 составляет + obj используя StringBuilder.append(Object) вместо StringBuilder.append(CharSequence) . Первый, вероятно, включает в себя вызов toString() метод объекта, тогда как последний должен быть возможен более эффективным способом. С другой стороны,—26—> просто возвращает String сам, так что там мало штрафа. Так что StringBuilder.append(String) может быть более эффективным, о один метод вызова.

tl; dr

One-это интерфейс ( CharSequence ), а другой-конкретную реализацию этого интерфейса ( String ).

как интерфейс, обычно CharSequence было бы более часто видно, чем String , но некоторая скрученная история привела к тому, что интерфейс был определен годами после реализация. Поэтому в более старых API мы часто видим String в то время как в новых API мы склонны видеть CharSequence используется для определения Аргументы и возвращаемые типы.

подробности

в настоящее время мы знаем, что обычно API/framework должен сосредоточиться на экспорте интерфейсов в первую очередь и конкретных классов во вторую очередь. Но мы не всегда так хорошо знали этот урок.

на String класс пришел первым в Java. Только позже они разместили фронтальный интерфейс, CharSequence .

Закрученная История

немного истории может помочь с пониманием.

In его первые дни Java был спешил на рынок немного раньше своего времени из-за Интернет/веб-мании, оживляющей отрасль. Некоторые библиотеки были не так хорошо продуманы, как следовало бы. Одной из таких областей была обработка строк.

кроме того, Java был одним из самых ранних ориентированных на производство неакадемических объектно-ориентированное программирование (ООП) средах. Единственными успешными реальными реализациями каучука-встреч-дороги ООП до этого были некоторые ограниченные версии SmallTalk, потом С С NeXTSTEP/OpenStep. Таким образом, многие практические уроки еще предстоит извлечь.

Java началась с String класс а StringBuffer класса. Но эти два класса не были связаны между собой, не были связаны друг с другом ни наследованием, ни интерфейсом. Позже команда Java признала, что должна была быть объединяющая связь между связанными строками реализации, чтобы сделать их взаимозаменяемыми. В Java 4 команда добавила CharSequence интерфейс и ретроактивно реализован этот интерфейс на String и String Buffer, а также добавление другой реализации CharBuffer . Позже, в Java 5 они добавили StringBuilder , в основном несинхронизированная и, следовательно, несколько более быстрая версия StringBuffer .

таким образом, эти строковые классы немного беспорядок, и немного запутанным, чтобы узнать о. Многие библиотеки и интерфейсы были созданы для take и return String объекты. В настоящее время такие библиотеки, как правило, должны быть построены ожидать CharSequence . Но (а) String кажется, все еще доминирует в пространстве разума, и (Б) могут быть некоторые тонкие технические проблемы при смешивании различных CharSequence реализаций. Оглядываясь назад, мы можем видеть, что все эти струнные вещи могли бы быть лучше обработаны, но вот мы здесь.

в идеале Java началась бы с интерфейс и / или суперкласс, который будет использоваться во многих местах, где мы сейчас используем String , так же, как мы используем Collection или List интерфейсы вместо ArrayList или LinkedList реализаций.

Интерфейс И Класс

ключевая разница о CharSequence — это интерфейс, а не реализация. Это означает, что вы не можете напрямую создать экземпляр CharSequence . Скорее вы создаете экземпляр одного из классов, который реализует этот интерфейс.

например, здесь мы имеем x вот такой CharSequence но под ним на самом деле

Источник

Charsequence android что это

A CharSequence is a readable sequence of char values. This interface provides uniform, read-only access to many different kinds of char sequences. A char value represents a character in the Basic Multilingual Plane (BMP) or a surrogate. Refer to Unicode Character Representation for details.

This interface does not refine the general contracts of the equals and hashCode methods. The result of comparing two objects that implement CharSequence is therefore, in general, undefined. Each object may be implemented by a different class, and there is no guarantee that each class will be capable of testing its instances for equality with those of the other. It is therefore inappropriate to use arbitrary CharSequence instances as elements in a set or as keys in a map.

Method Summary
char charAt (int index)
Returns the char value at the specified index.
int length ()
Returns the length of this character sequence.
CharSequence subSequence (int start, int end)
Returns a new CharSequence that is a subsequence of this sequence.
String toString ()
Returns a string containing the characters in this sequence in the same order as this sequence.

Method Detail

length

Returns: the number of char s in this sequence

charAt

If the char value specified by the index is a surrogate, the surrogate value is returned.

Parameters: index — the index of the char value to be returned Returns: the specified char value Throws: IndexOutOfBoundsException — if the index argument is negative or not less than length()

subSequence

Parameters: start — the start index, inclusive end — the end index, exclusive Returns: the specified subsequence Throws: IndexOutOfBoundsException — if start or end are negative, if end is greater than length(), or if start is greater than end

toString

Overrides: toString in class Object Returns: a string consisting of exactly this sequence of characters

Overview Package Class Use Tree Deprecated Index Help
Java TM 2 Platform
Standard Ed. 5.0
PREV CLASS NEXT CLASS FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD
Submit a bug or feature
For further API reference and developer documentation, see Java 2 SDK SE Developer Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Источник

Читайте также:  Рецепты алхимии для андроида
Оцените статью