package com.wzj;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* @author fins build 2006-07-18
* 顺序敏感的HashMap
* get(int idx)/remove(int idx) 为按加入hashMap的顺序号(index) 来取得/删除 数据
*/
public class IndexHashMap extends HashMap {
private static final long serialVersionUID = 1L;
private List list=new ArrayList();
public Object put(Object key, Object value) {
if (!containsKey(key)){
list.add(key);
}
return super.put(key, value);
}
public Object get(int idx){
return super.get(getKey(idx));
}
public int getIndex(Object key){
return list.indexOf(key);
}
public Object getKey(int idx){
if (idx>=list.size()) return null;
return list.get(idx);
}
public void remove(int idx){
Object key=getKey(idx);
removeFromList(getIndex(key));
super.remove(key);
}
public Object remove(Object key) {
removeFromList(getIndex(key));
return super.remove(key);
}
public void clear() {
this.list = new ArrayList();
super.clear();
}
private void removeFromList(int idx){
if (idx<list.size() && idx>=0) {
list.remove(idx);
}
}
}
引自http://fins.iteye.com/blog/32242
相关推荐
HashSet的元素排列没有特定顺序,迭代遍历的结果可能每次都不一样。 TreeSet则基于TreeMap实现,它维护了元素的排序顺序,可以按照自然排序或自定义比较器进行排序。默认情况下,元素会按照它们的自然顺序(即...
为了确保生成的随机数在一定范围内不重复,我们通常需要借助数据结构来辅助存储已经生成过的随机数,并在每次生成新的随机数前检查该数是否已经被使用过。这里提供了一种基于`ArrayList`的实现方法: ```csharp ...
HashSet内部使用哈希表存储元素,因此遍历顺序可能每次都不一样。示例代码如下: ```java HashSet<String> set = new HashSet(); // 添加元素... Iterator<String> iterator = set.iterator(); while (iterator....
- `Set` 不允许重复元素,无特定顺序,如HashSet和TreeSet。 - `Queue` 实现先进先出(FIFO)的数据结构,如ArrayDeque和PriorityQueue。 9. **异常处理** - try-catch-finally语句块用于捕获和处理异常。try块...
2. **String和StringBuffer的区别**:String是不可变对象,每次修改都会创建新的对象,适合不经常修改的情况;StringBuffer是可变对象,修改时不会创建新对象,适合在多线程环境下大量修改字符串内容。 3. **字符串...
13. CardLayout布局管理器允许界面像卡片一样切换,每次只显示一张卡片。 14. 右键点击文件或文件夹并选择“属性”可以修改其属性。 15. Access的数据库对象不包括文件夹,而是由表、查询、窗体等构成。 16. ...
- **HashSet**: 使用哈希表实现的Set接口,不保证集合中元素的顺序。 - **TreeSet**: 实现SortedSet接口,能够对集合中的元素进行排序。 - **LinkedHashSet**: 继承自HashSet,但是它维护了一个运行于所有条目的双重...
递归的关键在于必须有一个明确的递归基(基本情况)和每次递归调用都向递归基靠近。 3. **最大公约数(GCD)和最小公倍数(LCM)**: 求两个数的最大公约数可以使用欧几里得算法,即通过不断地用较小数除较大数,...
- **复制算法**:将内存分为大小相等的两块,每次只使用其中一块,当这一块用完之后,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。 - **标记-整理算法**:标记阶段与标记-清除...
2. **无序性**:像HashSet一样,CopyOnWriteArraySet也是无序的,插入元素的顺序并不影响遍历的顺序。 3. **遍历效率高**:迭代器在遍历时使用的是集合创建时的副本,因此在遍历过程中即使其他线程修改了集合,也...
UDP则提供无连接、不可靠的传输服务,不保证数据包的顺序和完整性,但传输速度快,适用于实时音频和视频流、在线游戏等对延迟敏感的场景。 ### 22. ASP.NET中的页面间数据传递方式 在ASP.NET中,页面间的数据传递...
Set是一种不重复的集合,其中的元素没有固定的顺序;Map是一种键值对集合,每个元素由一个键和一个对应的值组成。List和Set的主要实现类分别为ArrayList/LinkedList和HashSet/TreeSet,而Map的主要实现类包括HashMap...
- **复制算法(copying)**:将内存分为两块相等的空间,每次只使用其中一块,当这一块内存用完时,就将还存活的对象复制到另一块上,然后再把已使用过的内存空间一次清理掉。 - **标记整理算法(Mark-Compact)**:...
// 每次 a 的下一项都等于前一项*10,再加上刚输入时的 a ;注意,这时的 a 已经变化了。 } System.out.println("sum="+sum); } } 8、求 2/1+3/2+5/3+8/5+13/8.....前20项之和? class Sum{ public static ...
不使用中间变量 把两个变量的值互换 int a=10; int b=100; a=a*b; b=a/b; a=a/b; System.out.print("a="+a+" b="+b); 折半查找 public class Test { public static int[] data = { 12, 15, 20, 10, 19, 3, 89, ...