0 0

我用HashSet装东西结果顺序每次都不一样3

我用HashSet装东西结果顺序每次都不一样
请问这样的问题怎么解决呢???
1.是自己建一个类extends这些类
2.还是有好的现成的开源的东东来弄呢....
3.还是用其它什么办法
请问使每次的SET里结果顺序都一样
麻烦大家看一看
问题补充:
具体情况是:
我用List装的东西,结果输出来有重复的,结果我就用HashSet装
问题补充:
数据量不大的,只是装一些功能模块,有200条就不得了...但是我想用Set,因为我LIST经常用....你有好方法没?
问题补充:
怎么用啊,不会要自己建一个类去extends HashSet 再implements 那个排序的东东吧....
2008年11月21日 10:21

6个答案 按时间排序 按投票排序

0 0

采纳的答案

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

2008年11月24日 14:44
0 0

HashSet是不排序的
TreeSet是排序的

2008年11月24日 15:51
0 0

用TreeSet替换。

2008年11月21日 15:03
0 0

Set就是不常用。用Set可以实现集合排序到达目的。麻烦

2008年11月21日 11:10
0 0

哦,那就放之前遍历判断一下,如果数据量不大的话应该不好有性能问题

2008年11月21日 10:58
0 0

说说具体的情况把,可以使用数组或者list

2008年11月21日 10:51

相关推荐

    HashSet和TreeSet_围墙之外

    HashSet的元素排列没有特定顺序,迭代遍历的结果可能每次都不一样。 TreeSet则基于TreeMap实现,它维护了元素的排序顺序,可以按照自然排序或自定义比较器进行排序。默认情况下,元素会按照它们的自然顺序(即...

    unity 随机数不重复出现

    为了确保生成的随机数在一定范围内不重复,我们通常需要借助数据结构来辅助存储已经生成过的随机数,并在每次生成新的随机数前检查该数是否已经被使用过。这里提供了一种基于`ArrayList`的实现方法: ```csharp ...

    如何遍历一个java集合

    HashSet内部使用哈希表存储元素,因此遍历顺序可能每次都不一样。示例代码如下: ```java HashSet&lt;String&gt; set = new HashSet(); // 添加元素... Iterator&lt;String&gt; iterator = set.iterator(); while (iterator....

    Java面试32个经典问题

    - `Set` 不允许重复元素,无特定顺序,如HashSet和TreeSet。 - `Queue` 实现先进先出(FIFO)的数据结构,如ArrayDeque和PriorityQueue。 9. **异常处理** - try-catch-finally语句块用于捕获和处理异常。try块...

    Android高薪面试题集.doc

    2. **String和StringBuffer的区别**:String是不可变对象,每次修改都会创建新的对象,适合不经常修改的情况;StringBuffer是可变对象,修改时不会创建新对象,适合在多线程环境下大量修改字符串内容。 3. **字符串...

    2021-2022计算机二级等级考试试题及答案No.14039.docx

    13. CardLayout布局管理器允许界面像卡片一样切换,每次只显示一张卡片。 14. 右键点击文件或文件夹并选择“属性”可以修改其属性。 15. Access的数据库对象不包括文件夹,而是由表、查询、窗体等构成。 16. ...

    J面试-AVA核心知识点整理.pdf

    - **HashSet**: 使用哈希表实现的Set接口,不保证集合中元素的顺序。 - **TreeSet**: 实现SortedSet接口,能够对集合中的元素进行排序。 - **LinkedHashSet**: 继承自HashSet,但是它维护了一个运行于所有条目的双重...

    java面试题java面试题

    递归的关键在于必须有一个明确的递归基(基本情况)和每次递归调用都向递归基靠近。 3. **最大公约数(GCD)和最小公倍数(LCM)**: 求两个数的最大公约数可以使用欧几里得算法,即通过不断地用较小数除较大数,...

    JAVA核心知识整理.pdf

    - **复制算法**:将内存分为大小相等的两块,每次只使用其中一块,当这一块用完之后,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。 - **标记-整理算法**:标记阶段与标记-清除...

    Java concurrency集合之CopyOnWriteArraySet_动力节点Java学院整理

    2. **无序性**:像HashSet一样,CopyOnWriteArraySet也是无序的,插入元素的顺序并不影响遍历的顺序。 3. **遍历效率高**:迭代器在遍历时使用的是集合创建时的副本,因此在遍历过程中即使其他线程修改了集合,也...

    计算机类面试试题大奉献

    UDP则提供无连接、不可靠的传输服务,不保证数据包的顺序和完整性,但传输速度快,适用于实时音频和视频流、在线游戏等对延迟敏感的场景。 ### 22. ASP.NET中的页面间数据传递方式 在ASP.NET中,页面间的数据传递...

    2021-2022计算机二级等级考试试题及答案No.2811.docx

    Set是一种不重复的集合,其中的元素没有固定的顺序;Map是一种键值对集合,每个元素由一个键和一个对应的值组成。List和Set的主要实现类分别为ArrayList/LinkedList和HashSet/TreeSet,而Map的主要实现类包括HashMap...

    JAVA知识点.pdf

    - **复制算法(copying)**:将内存分为两块相等的空间,每次只使用其中一块,当这一块内存用完时,就将还存活的对象复制到另一块上,然后再把已使用过的内存空间一次清理掉。 - **标记整理算法(Mark-Compact)**:...

    达内 coreJava 习题答案

    // 每次 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 ...

    最新JAVA编程题全集_50题及答案

    不使用中间变量 把两个变量的值互换 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, ...

Global site tag (gtag.js) - Google Analytics