Collection set

HashSet:
HashSet是采用hash表算法来实现的,其中的元素没有按顺序排列,主要有add()、remove()以及contains()等方法;
add 方法实际调用hashmap put (map =new LinkedHashMap)
public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    private transient HashMap<E,Object> map;
    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
}
 
demo:
HashSet<Integer> hashSet = new HashSet<>();
hashSet.add(1);
hashSet.add(1);
hashSet.add(3);
 
hashSet.remove(3);
for (Integer var : hashSet) {
    System.out.println(var);
}
1
 
TreeSet :
public class TreeSet<E> extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, java.io.Serializable
{}
TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。
TreeSet是采用树结构实现(称为红黑树算法),元素是按顺序进行排列,主要有add()、remove()以及contains()等方法,它们都是复杂度为O(log (n))的方法;它还提供了一些处理排序的set方法,如first(), last(), headSet(), tailSet()等。
add 方法实际调用TreeMap put 方法 
private static final Object PRESENT = new Object();
public boolean add(E e) {
    return m.put(e, PRESENT)==null;  //m 为TreeMap
}
 
demo:
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(1);
treeSet.add(1);
treeSet.add(3);
treeSet.add(2);
 
//treeSet.remove(3);
for (Integer var : treeSet) {
    System.out.println(var);
}
1
2
3
 
LinkedHashSet:
LinkedHashSet正好介于HashSet和TreeSet之间,它也是一个hash表,但它同时维护了一个双链表来记录插入的顺序,基本方法的复杂度为O(1)。元素顺序是可以保证的.
public class LinkedHashSet<E>
    extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {}
 
demo:
LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(1);
linkedHashSet.add(1);
linkedHashSet.add(3);
linkedHashSet.add(2);
 
for (Integer var : linkedHashSet) {
    System.out.println(var);
}
1
3
2
posted @   小兵07  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示