Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Annushka555
0 / 0 / 0
Регистрация: 06.07.2013
Сообщений: 11

Работа с Map в java

06.07.2013, 13:15. Показов 1287. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, подскажите, пожалуйста..
У меня есть класс NotebookTxtMappedDb, в котором происходит работа с LinkedHashMap. В нем есть методы, которые записывают, читают, удаляют информацию из map. Если я создаю объект этого класса и записываю в LinkedHashMap информацию, то при повторном открытии мой старый LinkedHashMap исчезает, и вместо него создается новый. И вся информация, записанная ранее пропадает. Подскажите, пожалуйста, что нужно сделать, чтобы информация из map не удалялась?
P.S. Дублировать информацию в файл нельзя

Вот мой код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
 
/**
 * Created with IntelliJ IDEA.
 * User: Анна
 * Date: 24.04.13
 * Time: 19:43
 * To change this template use File | Settings | File Templates.
 */
public class NotebookTxtMappedDb extends NotebookTxtDb {
    private File file;
    private LinkedHashMap<String, Record> notebookCache;
    private NotebookTxtDb storage;
 
 
    NotebookTxtMappedDb(final String fileName) throws IOException {
        super(fileName);
 
        notebookCache = new LinkedHashMap<String, Record>();
 
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        try {
            String checkVar;
            while ((checkVar = br.readLine()) != null) {
                String line = checkVar + " ";                           // читаем в файле num строчек по порядку,записываем в 1 строчку
                for (int i = 0; i < Record.num - 1; i++) {
                    line += br.readLine() + " ";
                }
                Record rec = new Record(line);                       //записываем данные в notebookCache (ключ , значение)
                notebookCache.put(rec.name, rec);
 
            }
 
        } finally {
            br.close();
        }
    }
 
 
    public boolean isNameExists(final String name) throws IOException {
        return notebookCache.containsKey(name);
    }
 
    // запись данных (имя, телефон)  в Map
    public void addRecord(final String data) throws Exception {
        Record rec = new Record(data);
        if (isNameExists(rec.name)) {
            remove(rec.name);
            throw new Exception("This name already exists.");
        }
        notebookCache.put(rec.name, rec);
 
    }
 
    public void remove(final String name) {
        notebookCache.remove(name);
    }
 
 
    public String searchByName(final String name) throws IOException {
        if (!notebookCache.containsKey(name)) {
            return null;
        }
        return notebookCache.get(name).toString();
    }
 
    public String searchByPhone(final String phone) throws IOException {
        Iterator it = notebookCache.values().iterator();
        while (it.hasNext()) {
            Record rec = new Record(it.next().toString());
            if (rec.phone.equals(phone)) {
                return rec.name;
            }
        }
        return null;
    }
 
 
    public void Open() throws IOException {
        Iterator it = notebookCache.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            System.out.println(entry.getKey() + "  -  " + entry.getValue());
        }
    }
 
 
    public static void main(String[] args) throws Exception {
        //  NotebookTxtMappedDb m = new NotebookTxtMappedDb("filename");
        {
            NotebookTxtMappedDb m = new NotebookTxtMappedDb("filename");
            m.addRecord("name1 phone1 address1 19");
        }
        {
            NotebookTxtMappedDb m = new NotebookTxtMappedDb("filename");
            System.out.println(m.isNameExists("name1"));
        }
 
        //  final String info1 = "name1 phone1 address1 19";
 
 
    }
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2013, 13:15
Ответы с готовыми решениями:

Работа с Map Java 8
Кто-нибудь может подсказать как объединить, чтобы не требовалось создавать лист с ключами отдельно и потом пробегать через него, а сразу...

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map
Ошибка появляется когда пытаюсь вытянуть из кастомного адаптера запись ListView. Весь лог ошибки такой: FATAL EXCEPTION: main Process:...

Java. Интерфейс Map
Добрый вечер! Есть готовый класс Device, необходимо выполнить сортировку по названию фирмы, с помощью интерфейса MAP. !!HELP! Помогите...

3
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
06.07.2013, 15:47
Цитата Сообщение от Annushka555 Посмотреть сообщение
Если я создаю объект этого класса и записываю в LinkedHashMap информацию, то при повторном открытии мой старый LinkedHashMap исчезает, и вместо него создается новый. И вся информация, записанная ранее пропадает.
да ничего не пропадает в общем-то. вы создаете новый объект NotebookTxtMappedDb, у него естественно новая мапа. из старой данные никуда не деваются
0
 Аватар для Annushka555
0 / 0 / 0
Регистрация: 06.07.2013
Сообщений: 11
06.07.2013, 16:41  [ТС]
Но вообще как-то странно получается. Я пробую создать map только 1 раз (при первом создании объекта класса )
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
 
/**
 * Created with IntelliJ IDEA.
 * User: Анна
 * Date: 24.04.13
 * Time: 19:43
 * To change this template use File | Settings | File Templates.
 */
public class NotebookTxtMappedDb{ //extends NotebookTxtDb {
    private File file;
    private LinkedHashMap<String, Record> notebookCache;
    private NotebookTxtDb storage;
 
 
    NotebookTxtMappedDb(final String fileName) throws IOException {
        //super(fileName);
       file = new File(fileName);
        if (!file.exists()) {
            file.createNewFile();
            System.out.println("New file " + fileName + " has been created in the current directory");
 
        notebookCache = new LinkedHashMap<String, Record>();
        }
 
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        try {
            String checkVar;
            while ((checkVar = br.readLine()) != null) {
                String line = checkVar + " ";                           // читаем в файле num строчек по порядку,записываем в 1 строчку
                for (int i = 0; i < Record.num - 1; i++) {
                    line += br.readLine() + " ";
                }
                Record rec = new Record(line);                       //записываем данные в notebookCache (ключ , значение)
                notebookCache.put(rec.name, rec);
 
            }
 
        } finally {
            br.close();
        }
    }
 
 
    public boolean isNameExists(final String name) throws IOException {
        return notebookCache.containsKey(name);
    }
 
    // запись данных (имя, телефон)  в Map
    public void addRecord(final String data) throws Exception {
        Record rec = new Record(data);
        if (isNameExists(rec.name)) {
            remove(rec.name);
            throw new Exception("This name already exists.");
        }
        notebookCache.put(rec.name, rec);
 
    }
 
    public void remove(final String name) {
        notebookCache.remove(name);
    }
 
 
    public String searchByName(final String name) throws IOException {
        if (!notebookCache.containsKey(name)) {
            return null;
        }
        return notebookCache.get(name).toString();
    }
 
    public String searchByPhone(final String phone) throws IOException {
        Iterator it = notebookCache.values().iterator();
        while (it.hasNext()) {
            Record rec = new Record(it.next().toString());
            if (rec.phone.equals(phone)) {
                return rec.name;
            }
        }
        return null;
    }
 
 
    public void Open() throws IOException {
        Iterator it = notebookCache.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            System.out.println(entry.getKey() + "  -  " + entry.getValue());
        }
    }
 
 
    public static void main(String[] args) throws Exception {
        //  NotebookTxtMappedDb m = new NotebookTxtMappedDb("filename");
        {
            NotebookTxtMappedDb m = new NotebookTxtMappedDb("filename");
            m.addRecord("name1 phone1 address1 19");
        }
        {
            NotebookTxtMappedDb m = new NotebookTxtMappedDb("filename");
            System.out.println(m.isNameExists("name1"));
        }
 
        //  final String info1 = "name1 phone1 address1 19";
 
 
    }
 
}
и у меня возникает ошибка java.lang.NullPointerException в return метода -

public boolean isNameExists(final String name) throws IOException {
return notebookCache.containsKey(name);
}

Это означает, что map не создан?
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
06.07.2013, 21:01
Цитата Сообщение от Annushka555 Посмотреть сообщение
Но вообще как-то странно получается. Я пробую создать map только 1 раз (при первом создании объекта класса )
я не про мапу говорил, а про ваш класс

Java
1
2
3
4
5
6
7
8
9
10
    public static void main(String[] args) throws Exception {
        {
            NotebookTxtMappedDb  m = new NotebookTxtMappedDb ("filename"); // создаете объект номер 1
            m.addRecord("name1 phone1 address1 19");                       // пихаете в него что-то
        }
        {
            NotebookTxtMappedDb  m = new NotebookTxtMappedDb ("filename");  // создаете объект номер 2
            System.out.println(m.isNameExists("name1"));                    // пытаетесь внем найти то, что находится в первом
        }
    }
и непонятно зачем два блока пихаете в метод. так не:
Java
1
2
3
4
5
6
    public static void main(String[] args) throws Exception {
 
        NotebookTxtMappedDb m = new NotebookTxtMappedDb ("filename");
        m.addRecord("name1 phone1 address1 19");
        System.out.println(m.isNameExists("name1"));
    }
Цитата Сообщение от Annushka555 Посмотреть сообщение
Это означает, что map не создан?
да. но он у вас создается в конструкторе, значит проблема не в этом месте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.07.2013, 21:01
Помогаю со студенческими работами здесь

Map коллекции JAVA
Доброго времени суток) суть задания - есть класс Goods(в нем есть название товара, тип, цена за ед., дата производства и дата, когда товар...

Map интерфейс в Java
1. Учет товаров на складе Основной информационный объект: товар (код товара (уникален), название, ед. измерения, количество). Основные...

Работа с map()
Всем добрый день! У меня есть вот такой список : q = Мне нужно получить такой: q = Т.е. всего лишь дописать к каждому...

Работа с Map
Здрастуйте, у меня есть вот такой Map: Map&lt;String, Map&gt; main = new HashMap&lt;&gt;(); Map &lt;Ingredient, Integer&gt; m = new HashMap&lt;&gt;(); ...

Работа с Map
Доброго времени суток. Как подобное можно реализовать на Java? #include &lt;iostream&gt; #include &lt;map&gt; int main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru