Skip to content

Commit 7f5d272

Browse files
committed
PopupMenuBuilder: implement as a Map instead of a List
1 parent b8e0fc3 commit 7f5d272

File tree

1 file changed

+21
-22
lines changed

1 file changed

+21
-22
lines changed

nifty/src/main/java/jme3utilities/nifty/PopupMenuBuilder.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2626
*/
2727
package jme3utilities.nifty;
2828

29-
import java.util.ArrayList;
30-
import java.util.List;
29+
import java.util.HashMap;
30+
import java.util.Map;
3131
import java.util.logging.Logger;
3232
import jme3utilities.Validate;
3333

@@ -49,13 +49,9 @@ public class PopupMenuBuilder {
4949
// fields
5050

5151
/**
52-
* list of menu icon asset paths TODO implement as a Map instead of a List
52+
* map menu items to icon asset paths
5353
*/
54-
final protected List<String> iconAssetPaths = new ArrayList<>(40);
55-
/**
56-
* list of menu items
57-
*/
58-
final protected List<String> items = new ArrayList<>(40);
54+
final protected Map<String, String> itemMap = new HashMap<>(40);
5955
// *************************************************************************
6056
// new methods exposed
6157

@@ -66,9 +62,9 @@ public class PopupMenuBuilder {
6662
*/
6763
public void add(String item) {
6864
Validate.nonEmpty(item, "item");
65+
assert !itemMap.containsKey(item) : item;
6966

70-
items.add(item);
71-
iconAssetPaths.add(null);
67+
itemMap.put(item, null);
7268
}
7369

7470
/**
@@ -79,9 +75,9 @@ public void add(String item) {
7975
*/
8076
public void add(String item, String iconAssetPath) {
8177
Validate.nonEmpty(item, "item");
78+
assert !itemMap.containsKey(item) : item;
8279

83-
items.add(item);
84-
iconAssetPaths.add(iconAssetPath);
80+
itemMap.put(item, iconAssetPath);
8581
}
8682

8783
/**
@@ -103,10 +99,12 @@ public void addAll(Iterable<String> items) {
10399
* @return a new array
104100
*/
105101
public String[] copyIconAssetPaths() {
106-
int numIcons = iconAssetPaths.size();
102+
int numIcons = itemMap.size();
107103
String[] result = new String[numIcons];
108-
for (int i = 0; i < numIcons; i++) {
109-
result[i] = iconAssetPaths.get(i);
104+
int i = 0;
105+
for (String icontAssetPath : itemMap.values()) {
106+
result[i] = icontAssetPath;
107+
++i;
110108
}
111109

112110
return result;
@@ -118,10 +116,12 @@ public String[] copyIconAssetPaths() {
118116
* @return a new array
119117
*/
120118
public String[] copyItems() {
121-
int numItems = items.size();
119+
int numItems = itemMap.size();
122120
String[] result = new String[numItems];
123-
for (int i = 0; i < numItems; i++) {
124-
result[i] = items.get(i);
121+
int i = 0;
122+
for (String item : itemMap.keySet()) {
123+
result[i] = item;
124+
++i;
125125
}
126126

127127
return result;
@@ -135,7 +135,7 @@ public String[] copyItems() {
135135
*/
136136
public boolean hasItem(String item) {
137137
Validate.nonEmpty(item, "item");
138-
boolean result = items.contains(item);
138+
boolean result = itemMap.containsKey(item);
139139
return result;
140140
}
141141

@@ -145,15 +145,14 @@ public boolean hasItem(String item) {
145145
* @return true if empty, otherwise false
146146
*/
147147
public boolean isEmpty() {
148-
boolean result = items.isEmpty();
148+
boolean result = itemMap.isEmpty();
149149
return result;
150150
}
151151

152152
/**
153153
* Remove everything from the menu and start over.
154154
*/
155155
public void reset() {
156-
items.clear();
157-
iconAssetPaths.clear();
156+
itemMap.clear();
158157
}
159158
}

0 commit comments

Comments
 (0)