получить строку в качестве ссылки в Java - PullRequest
1 голос
/ 03 ноября 2010

Итак, я хочу иметь возможность иметь коллекцию изменяемых строк в Java.

У меня есть этот тестовый класс, чтобы увидеть функциональность неизменяемых строк:

public class GetStringTest
{
    private Vector<String> m_stringList;

    public GetStringTest()
    {
        m_stringList = new Vector<String>();

        m_stringList.add("zero");
        m_stringList.add("one");
        m_stringList.add("two");
        m_stringList.add("three");
        m_stringList.add("four");
        m_stringList.add("five");
        m_stringList.add("six");
    }

    public String getString(int index)
    {
        return m_stringList.get(index);
    }

    public String toString()
    {
        String str = "";

        for (String item : m_stringList)
        {
            str += item + "\n";
        }

        return str;
    }

    public static void main(String[] args)
    {
        GetStringTest gst = new GetStringTest();

        System.out.println("=== original content ===");
        System.out.println(gst);

        String strToChange = gst.getString(2); // "two"
        strToChange = "eleventy-one";

        System.out.println("=== with change ===");
        System.out.println(gst);
    }
}

Вывод:

=== original content ===
zero
one
two
three
four
five
six

=== with change ===
zero
one
two
three
four
five
six

Что можно сделать, чтобы сохранитьСтроки как изменчивые?Я думал о том, чтобы иметь класс StringObject, который бы просто содержал ссылку на строку.Это лучший вариант?

Ответы [ 4 ]

7 голосов
/ 03 ноября 2010

StringBuilder - это изменяемое строковое представление.

Изменяемая последовательность символов.

Это несинхронизированная (и более эффективная) версия StringBuffer

4 голосов
/ 03 ноября 2010

Могу ли я порекомендовать вам использовать StringBuffer.

Из API:

Потокобезопасная, изменяемая последовательность символов. Строковый буфер похож на String, но может быть изменен. В любой момент времени он содержит определенную последовательность символов, но длина и содержимое этой последовательности могут быть изменены с помощью определенных вызовов метода.

Обратите внимание, что если вы не планируете использовать его, вам лучше использовать StringBuilder, поскольку он не синхронизирован и работает быстрее.

2 голосов
/ 03 ноября 2010

Если вы хотите изменить (заменить) элемент списка, вы можете добавить

public String setString(int index,String str) 
    { 
        return m_stringList.set(index, str); 
    } 

и вызвать:

String strToChange = gst.setString(2,"eleventy-one"); 

вместо:

String strToChange = gst.getString(2); // "two" 
strToChange = "eleventy-one"; 

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

0 голосов
/ 03 ноября 2010

The не является эталонной копией на Java. Вы можете создать новый метод для класса GetString, чтобы установить новую строку для определенного индекса.

Пример: gst.changeString (index, "NewString");

changeString внутренне установил ссылку на "NewString".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...