Как отобразить и удалить значения в словаре, который содержит дубликаты ключей - PullRequest
2 голосов
/ 12 апреля 2020

В этой программе я хочу отобразить (текстовое представление) как Банан в качестве ключевого значения. И я хочу удалить значение ключа 2, которое содержит банан. и я хочу отобразить (textview2) как Orange. Есть ли какие-либо альтернативы там? Не могли бы вы дать мне решение, чтобы получить это? Заранее спасибо

int a = 1;
int b = 2;
int c = 3;
int d = 2;

Hashtable<Integer, String> my_dict = new Hashtable <Integer, String>();

my_dict.put(a, "Apple");
my_dict.put(b, "Banana");
my_dict.put(c, "Orange");
my_dict.put(d, "Grapes");

textView.setText(my_dict.get(1));//displays Apple
my_dict.remove(1);//removes Apple

textView2.setText(my_dict.get(2));//displays Grapes
my_dict.remove(2);//removes Grapes

textView3.setText(my_dict.get(2));//displays Banana
my_dict.remove(2);//removes Banana   

Но я не хочу изменять эти дубликаты ключей. Я хочу перебрать каждое значение ключа и получить данные, которые хранятся в этом ключе ... и я хочу удалить этот ключ и значение ... и после того, как я хочу проверить другое. (В данном случае)

1 Ответ

0 голосов
/ 12 апреля 2020

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

import java.util.Hashtable;

public class Main {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = 3;
        int d = 2;

        Hashtable<Integer, String> my_dict = new Hashtable <Integer, String>();

        my_dict.put(a, "Apple");
        my_dict.put(b, "Banana");
        my_dict.put(c, "Orange");
        my_dict.put(d, "Grapes");

        System.out.println(my_dict);
    }
}

Вывод:

{3=Orange, 2=Grapes, 1=Apple}

Как видите, Grape заменил Banana потому что он имеет тот же ключ, что и ключ Banana.

Если у вас есть требование, чтобы оба ключа Grape и Banana имели один и тот же идентификатор / ключ, вы можете реализовать свой собственный тип примерно так:

class Item {
    private int id;
    private String name;
    //Constructors, getters and setters 
}

Затем добавьте экземпляры Item в List, например,

List <Item> list = new ArrayList<Item>();
list.add(new Item(1, "Apple"));
list.add(new Item(2, "Banana"));
list.add(new Item(3, "Orange"));
list.add(new Item(2, "Grape"));

. Вы можете создать несколько служебных методов (пример приведен ниже) для получения необходимый элемент из List.

public Item getItemByName(List<Item> list, String itemName) {
    Item item = null;
    for(Item e: list){
        if(e.getName().equalsIgnoreCase(itemName)){
            item = e;
            break;
        }
    }
    return item;
}

Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

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