📄 defaultkeyedvalues.java
字号:
else {
this.keys.add(key);
this.values.add(value);
this.indexMap.put(key, new Integer(this.keys.size() - 1));
}
}
/**
* Inserts a new value at the specified position in the dataset or, if
* there is an existing item with the specified key, updates the value
* for that item and moves it to the specified position.
*
* @param position the position (in the range 0 to getItemCount()).
* @param key the key (<code>null</code> not permitted).
* @param value the value.
*
* @since 1.0.6
*/
public void insertValue(int position, Comparable key, double value) {
insertValue(position, key, new Double(value));
}
/**
* Inserts a new value at the specified position in the dataset or, if
* there is an existing item with the specified key, updates the value
* for that item and moves it to the specified position.
*
* @param position the position (in the range 0 to getItemCount()).
* @param key the key (<code>null</code> not permitted).
* @param value the value (<code>null</code> permitted).
*
* @since 1.0.6
*/
public void insertValue(int position, Comparable key, Number value) {
if (position < 0 || position > getItemCount()) {
throw new IllegalArgumentException("'position' out of bounds.");
}
if (key == null) {
throw new IllegalArgumentException("Null 'key' argument.");
}
int pos = getIndex(key);
if (pos == position) {
this.keys.set(pos, key);
this.values.set(pos, value);
}
else {
if (pos >= 0) {
this.keys.remove(pos);
this.values.remove(pos);
}
this.keys.add(position, key);
this.values.add(position, value);
rebuildIndex();
}
}
/**
* Rebuilds the key to indexed-position mapping after an positioned insert
* or a remove operation.
*/
private void rebuildIndex () {
this.indexMap.clear();
for (int i = 0; i < this.keys.size(); i++) {
final Object key = this.keys.get(i);
this.indexMap.put(key, new Integer(i));
}
}
/**
* Removes a value from the collection.
*
* @param index the index of the item to remove (in the range
* <code>0</code> to <code>getItemCount() - 1</code>).
*
* @throws IndexOutOfBoundsException if <code>index</code> is not within
* the specified range.
*/
public void removeValue(int index) {
this.keys.remove(index);
this.values.remove(index);
rebuildIndex();
}
/**
* Removes a value from the collection.
*
* @param key the item key (<code>null</code> not permitted).
*
* @throws IllegalArgumentException if <code>key</code> is
* <code>null</code>.
* @throws UnknownKeyException if <code>key</code> is not recognised.
*/
public void removeValue(Comparable key) {
int index = getIndex(key);
if (index < 0) {
throw new UnknownKeyException("The key (" + key
+ ") is not recognised.");
}
removeValue(index);
}
/**
* Clears all values from the collection.
*
* @since 1.0.2
*/
public void clear() {
this.keys.clear();
this.values.clear();
this.indexMap.clear();
}
/**
* Sorts the items in the list by key.
*
* @param order the sort order (<code>null</code> not permitted).
*/
public void sortByKeys(SortOrder order) {
final int size = this.keys.size();
final DefaultKeyedValue[] data = new DefaultKeyedValue[size];
for (int i = 0; i < size; i++) {
data[i] = new DefaultKeyedValue((Comparable) this.keys.get(i),
(Number) this.values.get(i));
}
Comparator comparator = new KeyedValueComparator(
KeyedValueComparatorType.BY_KEY, order);
Arrays.sort(data, comparator);
clear();
for (int i = 0; i < data.length; i++) {
final DefaultKeyedValue value = data[i];
addValue(value.getKey(), value.getValue());
}
}
/**
* Sorts the items in the list by value. If the list contains
* <code>null</code> values, they will sort to the end of the list,
* irrespective of the sort order.
*
* @param order the sort order (<code>null</code> not permitted).
*/
public void sortByValues(SortOrder order) {
final int size = this.keys.size();
final DefaultKeyedValue[] data = new DefaultKeyedValue[size];
for (int i = 0; i < size; i++) {
data[i] = new DefaultKeyedValue((Comparable) this.keys.get(i),
(Number) this.values.get(i));
}
Comparator comparator = new KeyedValueComparator(
KeyedValueComparatorType.BY_VALUE, order);
Arrays.sort(data, comparator);
clear();
for (int i = 0; i < data.length; i++) {
final DefaultKeyedValue value = data[i];
addValue(value.getKey(), value.getValue());
}
}
/**
* Tests if this object is equal to another.
*
* @param obj the object (<code>null</code> permitted).
*
* @return A boolean.
*/
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof KeyedValues)) {
return false;
}
KeyedValues that = (KeyedValues) obj;
int count = getItemCount();
if (count != that.getItemCount()) {
return false;
}
for (int i = 0; i < count; i++) {
Comparable k1 = getKey(i);
Comparable k2 = that.getKey(i);
if (!k1.equals(k2)) {
return false;
}
Number v1 = getValue(i);
Number v2 = that.getValue(i);
if (v1 == null) {
if (v2 != null) {
return false;
}
}
else {
if (!v1.equals(v2)) {
return false;
}
}
}
return true;
}
/**
* Returns a hash code.
*
* @return A hash code.
*/
public int hashCode() {
return (this.keys != null ? this.keys.hashCode() : 0);
}
/**
* Returns a clone.
*
* @return A clone.
*
* @throws CloneNotSupportedException this class will not throw this
* exception, but subclasses might.
*/
public Object clone() throws CloneNotSupportedException {
DefaultKeyedValues clone = (DefaultKeyedValues) super.clone();
clone.keys = (ArrayList) this.keys.clone();
clone.values = (ArrayList) this.values.clone();
clone.indexMap = (HashMap) this.indexMap.clone();
return clone;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -