Я понимаю basic idea инсценировки строк в Java, но я пытаюсь выяснить, в каких ситуациях это происходит, и что мне нужно будет сделать для моего собственного мухи.Когда это выгодно для мухи Струны в Java?
Несколько связанных:
- Java Strings: “String s = new String(”silly“);”
- The best alternative for String flyweight implementation in Java никогда не получил ответил
Вместе они говорят мне, что String s = "foo"
хорошо и String s = new String("foo")
это плохо, но нет никакого упоминания о любых других ситуациях.
В частности, если я разбираю файл (скажем, csv), который имеет много повторяющихся значений, будет ли интернирование внутри строки Java, или мне нужно что-то сделать самому? Я получил противоречивые советы о том или не применяется здесь Строка интернирование в моем other question
полного ответа пришли в нескольких фрагментах, поэтому я суммирую здесь:
По умолчанию, ява только стажеры строки, которые известны во время компиляции. String.intern(String)
может использоваться во время работы, но он работает не очень хорошо, поэтому подходит только для небольших номеров String
, которые вы обязательно повторите. много. Для больших наборов Strings это Guava для спасения (см. Ответ ColinD).
Почему карта, а не набор? HashSet кажется лучшим выбором для меня. –
Если вы используете набор, как вы можете вернуть интернированную версию? то есть, что бы вы заменили 'pool.get()' на? – andersoj
@Roland Illig: Я использую подобный подход с 'WeakReference' для реализации кэша для долговременного приложения, которое обрабатывает много идентичных строк из сетевых сообщений. –
andersoj