2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
1

Вставка HashMap в HashMap меняет все элементы

30.07.2013, 23:02. Показов 2412. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вставляю HashMap в HashMap генерируя карту доски для шахмат, привожу тестовый пример, вставляется только данные последней ячейки доски, с коллекциями java не работал, прошу направить на путь истинный
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
package test;
import java.util.HashMap;
 
class Board{
    protected HashMap<String, Integer> Board_Cell = new HashMap<String, Integer>();
    protected HashMap<Integer, HashMap<String, Integer>> Board = new HashMap<Integer, HashMap<String, Integer>>();
    
    public void Generate_Board(){
        this.Board_Cell.put("x", 200);
        this.Board_Cell.put("y", 200);
        this.Board.put(0, this.Board_Cell);
        this.Board_Cell.clear();
        
        this.Board_Cell.put("x", 300);
        this.Board_Cell.put("y", 300);
        this.Board.put(1, this.Board_Cell);
    }
}
 
public class Main {
    public static void main(String[] args) {
        Board board = new Board();
        board.Generate_Board();
        System.out.println(board.Board);
    }
}
На выводе данные последней клетки
Java
1
{0={y=300, x=300}, 1={y=300, x=300}}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2013, 23:02
Ответы с готовыми решениями:

ArrayList<HashMap<String,String>> get() - перебирает все элементы
Есть метод getList() который возвращает значение типа ArrayList&lt;HashMap&lt;String,String&gt;&gt; Если я...

HashMap - если попытаться обратиться к карте, то все списки показывает пустыми
Имеется java 7. При объявлении класса, объявляется вот такая переменная: private static...

Суммировать все значения HashMap
Дано множество разных фруктов сложенных в Map, нужно посчитать средний вес одного фрукта. public...

HashMap
Доброго времени суток. Есть класс import java.util.Map; import java.util.List; import...

7
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
30.07.2013, 23:10 2
если ключи совпадают, то мапа их перетрёт.
а так как Вы используете "x" -подобного рода строки, то "x" в первом и втором случае это одна и та же строка в памяти
0
18 / 18 / 2
Регистрация: 16.04.2013
Сообщений: 58
31.07.2013, 14:21 3
Цитата Сообщение от gredwhite Посмотреть сообщение
если ключи совпадают, то мапа их перетрёт.
а так как Вы используете "x" -подобного рода строки, то "x" в первом и втором случае это одна и та же строка в памяти
Не в этом дело. Когда вы вставляете ячейку на доску, то в ячейку записывается лишь ссылка на сам объект ячейки. А после вы этот объект сразу очищаете. Вот и получается, что остаётся только последнее значение.
Вместо создания ячейки как поля класса создавайте новую мапу и всё будет хорошо
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
31.07.2013, 23:36 4
Цитата Сообщение от Madonion Посмотреть сообщение
Не в этом дело. Когда вы вставляете ячейку на доску, то в ячейку записывается лишь ссылка на сам объект ячейки. А после вы этот объект сразу очищаете. Вот и получается, что остаётся только последнее значение.
Вместо создания ячейки как поля класса создавайте новую мапу и всё будет хорошо
2 раза вставляется одна и та же мапа, НО в ней ОДНО значение, ибо ключи одинаковые и второе значение затирает первое!!!
0
-7 / 22 / 4
Регистрация: 07.03.2013
Сообщений: 229
01.08.2013, 01:09 5
Цитата Сообщение от unandro Посмотреть сообщение
вставляется только данные последней ячейки доски
Это потому что ты удалил координаты первой ячейки сразу же после их создания.
Удали для начала эту строку:
Java
1
this.Board_Cell.clear();
Цитата Сообщение от gredwhite Посмотреть сообщение
2 раза вставляется одна и та же мапа, НО в ней ОДНО значение, ибо ключи одинаковые и второе значение затирает первое!!!
Внимательнее смотри, у него мапа в мапе, х,у - в данном примере являются значениями второй мапы. После первой генерации координат этот сет помещается во вторую мапу, а уже после этого затирается новыми значениями и точно так же добавляется в качестве значения не провоцируя коллизий в ту же, вторую мапу.
0
18 / 18 / 2
Регистрация: 16.04.2013
Сообщений: 58
01.08.2013, 01:13 6
Цитата Сообщение от gredwhite Посмотреть сообщение
2 раза вставляется одна и та же мапа, НО в ней ОДНО значение, ибо ключи одинаковые и второе значение затирает первое!!!
Какие <censored> ключи одинаковые?!
Java
1
2
3
4
5
6
this.Board_Cell.put("x", 200);
...
this.Board.put(0, this.Board_Cell);
this.Board_Cell.clear();
...
this.Board.put(1, this.Board_Cell);
0 и 1 - одинаковые ключи?..

Map<K, V>. Какое отношение "содержимое" объекта V имеет к ключам К ?! (помимо того, что V располагается во внутреннем массиве, исходя из K.hasCode())
0
Заблокирован
01.08.2013, 10:10 7
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.HashMap;
 
class Board {
    protected HashMap<String, Integer> Board_Cell; // = new HashMap<String, Integer>();
    protected HashMap<Integer, HashMap<String, Integer>> b = new HashMap<Integer, HashMap<String, Integer>>();
 
    public void Generate_Board() {
        Board_Cell = new HashMap<String, Integer>();
        this.Board_Cell.put("x", 200);
        this.Board_Cell.put("y", 200);
        this.b.put(0, this.Board_Cell);
        Board_Cell = new HashMap<String, Integer>();
        this.Board_Cell.put("x", 300);
        this.Board_Cell.put("y", 300);
        this.b.put(1, this.Board_Cell);
    }
 
    public static void main(String[] args) {
        Board board = new Board();
        board.Generate_Board();
        System.out.println(board.b);
    }
}
0
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
01.08.2013, 11:03 8
Цитата Сообщение от unandro Посмотреть сообщение
На выводе данные последней клетки
Что значит "последней клетки"? Это одна и та же клетка, один и тот же объект.

Кроме того, использование HashMap для подобной задачи - это забивание гвоздей микроскопом.

Шахматная доска - это просто массив из 64 элементов, никаких огородов тут городить не надо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2013, 11:03
Помогаю со студенческими работами здесь

HashMap
Допустим, есть HashMap (нет, код привести не могу). В нем пары слов - на инглише и перевод. Мне...

SharedPreferences, HashMap
Хочу сделать Save , Load в sharedPreferences и вывести результат в Log. не вижу ошибки :wall: ...

Сортировка HashMap
Есть HashMap такого вида: HashMap&lt;String, Integer&gt; map = new HashMap&lt;String, Integer&gt;(); Нужно...

HashMap and key
Здравствуйте, форумчане. Спасибо большое, Вы очень помогаете. На этот раз сложность возникла у меня...

Работа с HashMap
Привет. столкнулся с такой трудностью. есть некий HashMap c ключом Date и объектом . в объекте есть...

Сортировка HashMap
Здравствуйте. У меня есть HashMap&lt;Integer, MyClass&gt;. У MyClass имеется поле name типа String, как...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru