В CentOS 7 просто остановка и запуск службы MySQL исправили это для меня.
sudo service mysql stop
sudo service mysql start
Я предлагаю a LinkedHashMap
или a TreeMap
. A LinkedHashMap
сохраняет ключи в порядке, они были вставлены, в то время как a TreeMap
сохранен отсортированным через a Comparator
или естественное Comparable
упорядочивание элементов.
Так как это не должно сохранять элементы отсортированными, LinkedHashMap
должно быть быстрее для большинства случаев; TreeMap
имеет O(log n)
производительность для containsKey
, get
, put
, и remove
, по словам Javadoc, в то время как LinkedHashMap
O(1)
для каждого.
Если Ваш API, который только ожидает предсказуемый порядок сортировки, в противоположность определенному порядку сортировки, рассматривает использование интерфейсов эти два класса реализация, NavigableMap
или SortedMap
. Это позволит Вам не пропускать определенные реализации в свой API и переключаться или на тех определенных классов или на совершенно другой реализации по желанию впоследствии.
Можно поддержать a Map
(для быстрого поиска) и List
(для порядка), но a LinkedHashMap
может быть самым простым. Можно также попробовать a SortedMap
например. TreeMap
, который любого порядка Вы указываете.
Я не знаю, является ли это открытый исходный код, но после небольшого поиска с помощью Google, я нашел эту реализацию использования Карты ArrayList. Это, кажется, пред1.5 Java, таким образом, Вы могли бы хотеть к genericize это, который должен быть легким. Обратите внимание, что эта реализация имеет O (N) доступ, но это не должно быть проблемой, если Вы не добавляете сотни виджетов к своему JPanel, который Вы не были должны так или иначе.
Или можно использовать LinkedHashMap<K, V>
, или можно реализовать Вас собственный CustomMap, который поддерживает порядок вставки.
можно использовать Следующий CustomHashMap
со следующими функциями:
null
или пустые строки не позволяются. HashMap
по сравнению с LinkedHashMap
по сравнению с CustomHashMap
interface CustomMap<K, V> extends Map<K, V> {
public boolean insertionRule(K key, V value);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public class CustomHashMap<K, V> implements CustomMap<K, V> {
private Map<K, V> entryMap;
// SET: Adds the specified element to this set if it is not already present.
private Set<K> entrySet;
public CustomHashMap() {
super();
entryMap = new LinkedHashMap<K, V>();
entrySet = new HashSet();
}
@Override
public boolean insertionRule(K key, V value) {
// KEY as null and EMPTY String is not allowed.
if (key == null || (key instanceof String && ((String) key).trim().equals("") ) ) {
return false;
}
// If key already available then, we are not overriding its value.
if (entrySet.contains(key)) { // Then override its value, but we are not allowing
return false;
} else { // Add the entry
entrySet.add(key);
entryMap.put(key, value);
return true;
}
}
public V put(K key, V value) {
V oldValue = entryMap.get(key);
insertionRule(key, value);
return oldValue;
}
public void putAll(Map<? extends K, ? extends V> t) {
for (Iterator i = t.keySet().iterator(); i.hasNext();) {
K key = (K) i.next();
insertionRule(key, t.get(key));
}
}
public void clear() {
entryMap.clear();
entrySet.clear();
}
public boolean containsKey(Object key) {
return entryMap.containsKey(key);
}
public boolean containsValue(Object value) {
return entryMap.containsValue(value);
}
public Set entrySet() {
return entryMap.entrySet();
}
public boolean equals(Object o) {
return entryMap.equals(o);
}
public V get(Object key) {
return entryMap.get(key);
}
public int hashCode() {
return entryMap.hashCode();
}
public boolean isEmpty() {
return entryMap.isEmpty();
}
public Set keySet() {
return entrySet;
}
public V remove(Object key) {
entrySet.remove(key);
return entryMap.remove(key);
}
public int size() {
return entryMap.size();
}
public Collection values() {
return entryMap.values();
}
}
Использование [1 110]:
public static void main(String[] args) {
System.out.println("== LinkedHashMap ==");
Map<Object, String> map2 = new LinkedHashMap<Object, String>();
addData(map2);
System.out.println("== CustomHashMap ==");
Map<Object, String> map = new CustomHashMap<Object, String>();
addData(map);
}
public static void addData(Map<Object, String> map) {
map.put(null, "1");
map.put("name", "Yash");
map.put("1", "1 - Str");
map.put("1", "2 - Str"); // Overriding value
map.put("", "1"); // Empty String
map.put(" ", "1"); // Empty String
map.put(1, "Int");
map.put(null, "2"); // Null
for (Map.Entry<Object, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}
O/P:
== LinkedHashMap == | == CustomHashMap ==
null = 2 | name = Yash
name = Yash | 1 = 1 - Str
1 = 2 - Str | 1 = Int
= 1 |
= 1 |
1 = Int |
<час> , Если Вы знаете, КЛЮЧ починен тогда, можно использовать EnumMap. Доберитесь значения формируют СВОЙСТВА/XML-ФАЙЛЫ
EX:
enum ORACLE {
IP, URL, USER_NAME, PASSWORD, DB_Name;
}
EnumMap<ORACLE, String> props = new EnumMap<ORACLE, String>(ORACLE.class);
props.put(ORACLE.IP, "127.0.0.1");
props.put(ORACLE.URL, "...");
props.put(ORACLE.USER_NAME, "Scott");
props.put(ORACLE.PASSWORD, "Tiget");
props.put(ORACLE.DB_Name, "MyDB");
Если неизменяемая карта соответствует вашим потребностям, тогда есть библиотека Google под названием guava (см. также вопросы по гуаве)
Гуава предоставляет ImmutableMap с надежным заданным пользователем порядком итерации. Этот ImmutableMap имеет производительность O(1) для containsKey, get. Очевидно, что установка и удаление не поддерживаются.
Объекты ImmutableMap создаются с использованием либо элегантных статических удобных методов of() и copyOf(), либо объекта Builder.