Java集合类学习--Set

C#调用Halcon程序三种方法 C#调用Halcon程序三种方法 1.halcon导出C#文件,在C#里面调用 2.在C#里面使用Halcon引擎调用Halcon程序 3.在C#里面使用Halcon引擎调用.hdev下本地函数或者.hdvp外部函数 Halcon引擎手册:C:/Program Files/MVTec/HALCON-21.11-Progress/doc_en_US/html/manuals/programmers_guide/programmers_guide_0120.html 1.导出C#(代码我只给出类,需要调用) 阅读详情

Set

JDK对Set的实现进行了取巧。我们都知道Set不允许出现相同的对象,而Map也同样不允许有两个相同的Key(出现相同的时候,就执行更新操作)。所以Set里的实现实际上是调用了对应的Map,将Set的存放的对象作为Map的Key。
Set接口的方法如下:
在这里插入图片描述
由此可以看出,Set基本上就保持了Collection的原方法,所以,就从Set的实现开始学习。

Set的实现主要有HashSet,TreeSet。

HashSet

HashSet源码中,属性包含两个信息点:

	// 内部使用HashMap
    private transient HashMap<E,Object> map;
    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

观察源码,我们知道HashSet的数据是存储在HashMap的实例对象map中的,并且对应于map中的key,而Object类型的引用PRESENT则是对应于map中的value的一个虚拟值,没有实际意义。联想到HashMap的一些特性:无序存储、key值唯一等等,我们就可以很自然地理解Set集合元素不能重复以及HashSet无序存储的特性了。(关于HashMap的具体实现后续学习补充。)
构造器(四种)
1.HashSet() 空的构造器,初始化一个空的HashMap

public HashSet() {
        map = new HashMap<>();
    }

2.HashSet(Collection<? extends E> c) 传入一个子集c,用于初始化HashMap

public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }

3.HashSet(int initialCapacity, float loadFactor) 初始化一个空的HashMap,并指定初始容量和加载因子

    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

4.HashSet(int initialCapacity) 初始化一个空的HashMap,并指定初始容量

    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

除了上面之外,还有个特殊的:

// 非public,主要是给LinkedHashSet使用的
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<>(initialCapacity, loadFactor);
}

其他方法解析:

 //克隆
 @SuppressWarnings("unchecked")
    public Object clone() {
        try {
            HashSet<E> newSet = (HashSet<E>) super.clone();
            newSet.map = (HashMap<E, Object>) map.clone();
            return newSet;
        } catch (CloneNotSupportedException e) {
            throw new InternalError(e);
        }
    }

    /**
     * Save the state of this <tt>HashSet</tt> instance to a stream (that is,
     * serialize it).
     *
     * @serialData The capacity of the backing <tt>HashMap</tt> instance
     *             (int), and its load factor (float) are emitted, followed by
     *             the size of the set (the number of elements it contains)
     *             (int), followed by all of its elements (each an Object) in
     *             no particular order.
     */
	//序列化写
    private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException {
        // Write out any hidden serialization magic
        s.defaultWriteObject();

        // 写出map的容量和装载因子
        s.writeInt(map.capacity());
        s.writeFloat(map.loadFactor());

        // Write out size
        s.writeInt(map.size());

        // Write out all elements in the proper order.
        // 遍历写出所有元素
        for (E e : map.keySet())
            s.writeObject(e);
    }

    /**
     * Reconstitute the <tt>HashSet</tt> instance from a stream (that is,
     * deserialize it).
     */
    private void readObject(java.io.ObjectInputStream s)
        throws java.io.IOException, ClassNotFoundException {
        // Read in any hidden serialization magic
        s.defaultReadObject();

        // Read capacity and verify non-negative.
        int capacity = s.readInt();
        if (capacity < 0) {
            throw new InvalidObjectException("Illegal capacity: " +
                                             capacity);
        }

        // Read load factor and verify positive and non NaN.
        //读入装载因子, 并检查不能小于等于0或者是NaN(Not a Number)
        // java.lang.Float.NaN = 0.0f / 0.0f;
        float loadFactor = s.readFloat();
        if (loadFactor <= 0 || Float.isNaN(loadFactor)) {
            throw new InvalidObjectException("Illegal load factor: " +
                                             loadFactor);
        }

        // Read size and verify non-negative.
        int size = s.readInt();
        if (size < 0) {
            throw new InvalidObjectException("Illegal size: " +
                                             size);
        }

        // Set the capacity according to the size and load factor ensuring that
        // the HashMap is at least 25% full but clamping to maximum capacity.
        // 根据元素个数重新设置容量
        capacity = (int) Math.min(size * Math.min(1 / loadFactor, 4.0f),
                HashMap.MAXIMUM_CAPACITY);

        // Create backing HashMap
        map = (((HashSet<?>)this) instanceof LinkedHashSet ?
               new LinkedHashMap<E,Object>(capacity, loadFactor) :
               new HashMap<E,Object>(capacity, loadFactor));

        // Read in all elements in the proper order.
        for (int i=0; i<size; i++) {
            @SuppressWarnings("unchecked")
                E e = (E) s.readObject();
            map.put(e, PRESENT);
        }
    }

TreeSet

TreeSet是SortedSet接口的唯一实现类。前面说过,TreeSet没有自己的数据结构而是通过TreeMap实现的,所以TreeSet也是基于红黑二叉树的一种存储结构,所以TreeSet不允许null对象,并且是有序存储的(默认升序)。
属性:

	private transient NavigableMap<E,Object> m;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

NavigableMap是继承自SrotedMap的一个接口,其实现类为TreeMap,所以说TreeMap实现的。

构造器(四种)

1.TreeSet() 空的构造器,初始化一个空的TreeMap,默认升序排列

	// 以自然排序方式创建一个新的 TreeMap,
    // 根据该 TreeSet 创建一个 TreeSet,
    // 使用该 TreeMap 的 key 来保存 Set 集合的元素
    public TreeSet() {
        this(new TreeMap<E,Object>());
    }

2.TreeSet(Comparator<? super E> comparator) 传入一个自定义的比较器,常常用于实现降序排列

      // 以定制排序方式创建一个新的 TreeMap,
     // 根据该 TreeSet 创建一个 TreeSet,
    // 使用该 TreeMap 的 key 来保存 Set 集合的元素
    public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }

3.TreeSet(Collection<? extends E> c) 传入一个子集c,用于初始化TreeMap对象,默认升序


    public TreeSet(Collection<? extends E> c) {
        this();
        // 向 TreeSet 中添加 Collection 集合 c 里的所有元素
        addAll(c);
    }

4.TreeSet(SortedSet s) 传入一个有序的子集s,用于初始化TreeMap对象,采用子集的比较器


   public TreeSet(SortedSet<E> s) {
        this(s.comparator());
        addAll(s);
    }

其他方法解析:
TreeSet 里绝大部分方法都是直接调用 TreeMap 的方法来实现的。(TreeMap后续学习补充 )


	// 逆序迭代器
    public Iterator<E> descendingIterator() {
        return m.descendingKeySet().iterator();
    }

     // 以逆序返回一个新的TreeSet
    public NavigableSet<E> descendingSet() {
        return new TreeSet<>(m.descendingMap());
    }
	 // 添加集合c中的所有元素
    public  boolean addAll(Collection<? extends E> c) {
        // 满足一定条件时直接调用TreeMap的addAllForTreeSet()方法添加元素
        if (m.size()==0 && c.size() > 0 &&
            c instanceof SortedSet &&
            m instanceof TreeMap) {
            SortedSet<? extends E> set = (SortedSet<? extends E>) c;
            TreeMap<E,Object> map = (TreeMap<E, Object>) m;
            Comparator<?> cc = set.comparator();
            Comparator<? super E> mc = map.comparator();
            if (cc==mc || (cc != null && cc.equals(mc))) {
                map.addAllForTreeSet(set, PRESENT);
                return true;
            }
        }
        // 不满足上述条件, 调用父类的addAll()通过遍历的方式一个一个地添加元素
        return super.addAll(c);
    }

 // 子set(NavigableSet中的方法)
    public NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
                                  E toElement,   boolean toInclusive) {
        return new TreeSet<>(m.subMap(fromElement, fromInclusive,
                                       toElement,   toInclusive));
    }
    
    // 头set(NavigableSet中的方法)
    public NavigableSet<E> headSet(E toElement, boolean inclusive) {
        return new TreeSet<>(m.headMap(toElement, inclusive));
    }

    // 尾set(NavigableSet中的方法)
    public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
        return new TreeSet<>(m.tailMap(fromElement, inclusive));
    }

    // 子set(SortedSet接口中的方法)
    public SortedSet<E> subSet(E fromElement, E toElement) {
        return subSet(fromElement, true, toElement, false);
    }

    // 头set(SortedSet接口中的方法)
    public SortedSet<E> headSet(E toElement) {
        return headSet(toElement, false);
    }
    
    // 尾set(SortedSet接口中的方法)
    public SortedSet<E> tailSet(E fromElement) {
        return tailSet(fromElement, true);
    }

排序相关:

// 比较器
    public Comparator<? super E> comparator() {
        return m.comparator();
    }

    // 返回最小的元素
    public E first() {
        return m.firstKey();
    }
    
    // 返回最大的元素
    public E last() {
        return m.lastKey();
    }

    // 返回小于e的最大的元素
    public E lower(E e) {
        return m.lowerKey(e);
    }

    // 返回小于等于e的最大的元素
    public E floor(E e) {
        return m.floorKey(e);
    }
    
    // 返回大于等于e的最小的元素
    public E ceiling(E e) {
        return m.ceilingKey(e);
    }
    
    // 返回大于e的最小的元素
    public E higher(E e) {
        return m.higherKey(e);
    }
    
    // 弹出最小的元素
    public E pollFirst() {
        Map.Entry<E,?> e = m.pollFirstEntry();
        return (e == null) ? null : e.getKey();
    }

    public E pollLast() {
        Map.Entry<E,?> e = m.pollLastEntry();
        return (e == null) ? null : e.getKey();
    }

其他方法:

// 克隆方法
    @SuppressWarnings("unchecked")
    public Object clone() {
        TreeSet<E> clone;
        try {
            clone = (TreeSet<E>) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new InternalError(e);
        }

        clone.m = new TreeMap<>(m);
        return clone;
    }

    // 序列化写出方法
    private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException {
        // Write out any hidden stuff
        s.defaultWriteObject();

        // Write out Comparator
        s.writeObject(m.comparator());

        // Write out size
        s.writeInt(m.size());

        // Write out all elements in the proper order.
        for (E e : m.keySet())
            s.writeObject(e);
    }

    // 序列化写入方法
    private void readObject(java.io.ObjectInputStream s)
        throws java.io.IOException, ClassNotFoundException {
        // Read in any hidden stuff
        s.defaultReadObject();

        // Read in Comparator
        @SuppressWarnings("unchecked")
            Comparator<? super E> c = (Comparator<? super E>) s.readObject();

        // Create backing TreeMap
        TreeMap<E,Object> tm = new TreeMap<>(c);
        m = tm;

        // Read in size
        int size = s.readInt();

        tm.readTreeSet(size, s, PRESENT);
    }

总结:

对比:

TreeSet和HashSet
相同点:
都是唯一不重复的Set集合。
不同点:
底层来说,HashSet是用Hash表来存储数据,而TreeSet是用二叉平衡树来存储数据。 功能上来说,由于TreeSet是有序的Set,可以使用SortedSet。接口的first()、last()等方法。但由于要排序,势必要影响速度。所以,如果不需要顺序的话,还是使用HashSet吧,使用Hash表存储数据的HashSet在速度上更胜一筹。如果需要顺序则TreeSet更为明智。
底层来说,HashSet是用Hash表来存储数据,而TreeSet是用二叉平衡树来存储数据。
TreeSet和TreeMap
相同点:
TreeMap和TreeSet都是有序的集合。
TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步。
运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1)。
不同点:
最主要的区别就是TreeSet和TreeMap非别实现Set和Map接口
TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅key对象有序)
TreeSet中不能有重复对象,而TreeMap中可以存在。

总结:

HashSet
(1)HashSet内部使用HashMap的key存储元素,以此来保证元素不重复;
(2)HashSet是无序的,因为HashMap的key是无序的;
(3)HashSet中允许有一个null元素,因为HashMap允许key为null
(4)HashSet是非线程安全的;
(5)HashSet是没有get()方法的;
TreeSet
(1)TreeSet底层使用NavigableMap存储元素;
(2)TreeSet是有序的;
(3)TreeSet是非线程安全的;
(4)TreeSet实现了NavigableSet接口,而NavigableSet继承自SortedSet接口;
(5)TreeSet实现了SortedSet接口。

基于STM32H5的循环GPDMA链表使用 STM32H503的GPDMA链表模式可实现灵活的数据传输。相比传统DMA直接编程方式,链表模式通过配置多个节点实现分散数据传输,支持循环链表功能。示例展示了如何使用GPDMA链表实现UART1循环发送数据:配置两个DMA节点分别指向不同发送缓冲区,构建循环链表并绑定到DMA通道。关键点包括:清空链表结构体、正确设置循环模式、检查节点配置。此方法提高了DMA使用的灵活性,适用于需要交替传输多段数据的场景。 阅读详情

相关推荐

Windows版本Carla(含RoadRunner插件)源码安装+RoadRunner地图导入

通过跳转浏览器账号密码登录github,不要选择Fine-grained personal access tokens,在git clone时会显示非授权,也不要使用Windows凭据!核心指令:编译PythonAPI–make PythonAPI,,编译Server–make launch,封装”游戏“–make package。完成安装后,在已安装->2022版本右侧->更多->导入配置,选择配置文件(需将配置文件内容更新为手册内容,如下图)->详细信息,更新。不要修改版本,执行上面指令即可!

winnizap的博客 1467

HashSet

1、简介HashSet是基于HashMap的key实现,元素由hash表支持,不保证元素的顺序。1.2 继承关系java.lang.Object java.util.AbstractCollection<E> java.util.AbstractSet<E> java.util.HashSet<E>1.3 构造函数//构造一个新的空集合; 背景Hash

with_dream的博客 291

[官方培训]22-UE资产优化 Epic 肖月 笔记

Nanite+Lumen目标:面向TA,美术,不影响视觉的前提下,优化运行和编辑效率引擎:UE5.1延迟管线平台:主流PC,Windows 10 with DX12。

Tcohneyn的博客 1574

分析Collection(四)了解HashSet 构造

HashSet 大家应该都知道,Set这个接口下的对象是不能有重复的,为什么不能有重复呢??今天咱就深入扒一下。而且Set也是没有顺序的。 今天我们通过看它的源代码来深入分析一下 本文章不敢和隔壁的大佬相比,只能尽力写的让各位看官看明白,能够了解到HashSet的结构 听别人说,IDEA可以更容易的看到JDK的源代码,不像Eclipse那样,那么麻烦,而且前两天考试的时候规定用IDEA来敲代码,正好今天拿来试试,虽然用过一段时间IDEA,但是感觉还是Eclipse用的熟悉,废话说完了,开始进入正题 开始

Fanx繁星 762

华为Atlas 300I推理卡驱动安装避坑指南:不同安装方式的选择与优化

本文详细解析华为Atlas 300I推理卡驱动安装的三种主流方式(.run、.rpm和源码编译),提供关键环境检查步骤、安装流程优化建议及常见问题解决方案,帮助开发者高效完成芯片推理卡部署并规避典型安装陷阱。

q9w8e7r6t5的博客 431

Prompt Airlines CTF通关实战:从提示词注入到多模态攻击的AI安全攻防演练

提示词注入(Prompt Injection)是当前大语言模型(LLM)应用面临的核心安全威胁之一,其原理在于攻击者通过精心构造的用户输入,覆盖或绕过系统预设的指令,从而操控模型行为。这种攻击手法的技术价值在于揭示了AI系统在理解与执行指令时存在的逻辑边界模糊性,可能导致数据泄露、越权访问等严重风险。在应用场景上,从基础的客服对话到结合视觉识别的多模态系统,都可能成为攻击面。本文以一场名为“Prompt Airlines CTF”的实战挑战为例,深入剖析了包括指令遗忘、上下文注入、工具调用滥用及多模态提示注

aodan5477的博客 515

java中的Set集合详解

原文之部分某处有争论,读者谨慎阅读,后期本人再进行本文内容修正 1.简介 Set集合中的元素是无序的且不可重复, 如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。 2.HasheSet底层数据结构 HashSet底层数据结构是哈希表,因此具有很好的存取和查找性能。 哈希表:一个元素为链表的数组,综合了链表(存储速度快)和数组(查询速度快)的优点。 3.哈希表的存取原理 3.1 调用对象的hashCode()方法,获得要存储元素的哈希值。

m0_53222768的博客 1万+

C#里用HttpListener实现WEB API接口服务端

本文介绍了一个基于WinForm的HTTP服务实现方案。该方案使用HttpListener类创建了一个支持JSON POST请求处理的轻量级Web服务器,主要特点包括:1) 纯线程方式实现请求监听和处理;2) 提供标准化的JSON响应格式;3) 支持自定义请求处理逻辑;4) 包含完整的日志记录功能。代码示例展示了如何初始化服务、处理不同类型的请求(包括JSON POST),并提供了线程安全的UI更新机制。该实现适用于需要简单HTTP接口的Windows桌面应用程序,可作为程序间通信的基础设施。

大坡3D软件开发 226

JAVA入门学习 —集合(Set使用)

前言 集合中List和Set的区别: List:有序可重复,有序指的是下标有序 、可重复指的是不同下标位置上可以存储相同值的元素。 Set:无序不可重复,录入的顺序和存储的顺序不一致、不可重复指的是相同值的元素不可重复存储。 show code @Test public void test() { Set set = new HashSet(); byte a = 1; short b = 2; int c = 3;

weixin_67614925的博客 2592

Open Dynamics Engine(ODE)物理引擎教程(1)--下载与安装准备

引言 ODE是一个免费的工业级库,用于模拟关节式刚体动力学,例如地面车辆、腿部生物和虚拟现实环境中的移动对象。它具有快速、灵活、健壮和独立于平台的特点,具有先进的关节、摩擦接触和内置的碰撞检测功能。 项目主页:http://www.ode.org/ 线上手册:http://ode.org/wiki/index.php?title=Manual 本教程为博主亲自亲测过程的总结,转载请注明出处! ...

腿足机器人领域 2216

深入介绍 SAP OData CSRF Token 的一些技术细节

跨站请求伪造(Cross-Site Request Forgery,简称 CSRF)是一种网络攻击手段,它允许攻击者伪造用户的身份来执行未经授权的操作。为了防止 CSRF 攻击,常用的一种技术手段就是 CSRF Token.CSRF Token 是一种随机生成的防伪 Token,它由服务器颁发给客户端,并需要客户端在提交某些特定类型的请求时,将该 Token 添加到 HTTP 请求的头部字段去。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 642

27.5 Java集合之Set学习(基本概念,存储原理,性能测试)

当进行add(E e)的时候,就会向map中put(e,Object常量),如果返回的是null,则表示添加成功,如果返回的不是null,则表示Map中已经存在键值对,添加失败。当进行add(E e)的时候,就会向map中put(e,Object常量),如果返回的是null,则表示添加成功,如果返回的不是null,则表示Map中已经存在键值对,添加失败。简单来说,TreeSet也是借助TreeMap来进行存储的,TreeMap是Map的有序实现,它会根据键的顺序将元素组织为一个搜索树。

c1776167012的博客 1212

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java学习之集合类List、Set、Map

具体的关于ArrayList等实现类的介绍有时间再专门写篇文章,这里只是作简单介绍 集合类概述 集合类又被称为容器,和数组类似都能够存储一定的数据,但是又不一样。 常用的集合有List、Set、Map。其中接口List和Set继承了Collection接口,各接口还提供了不同的实现类。 在说常见集合之前,先提一下Collection类。Collection类是层次结构中的根接口。构...

秋水惊鸿的博客 389

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java集合类List、Set学习笔记

Java集合类Java集合框架URL图List 列表ArrayListArrayList的几个重要属性ArrayList的扩容机制、LinkedListLinkedList的几个重要属性构造器LinkedList 的内部实现针对List列表集合类,jdk还提供了一个特殊的迭代器ListIteratorArrayList, LinkedList 和 Vector 的区别集合类HashSet底层实现TreeSet底层实现HashMap 和 HashSet的区别 Java集合框架URL图 List 列表 接口L

cheendf的博客 222

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Java学习】java集合类set

set是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。 对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。具体的 Set 实现类依赖添加的对象的 equals() 方法来检查等同性。  各个方法的作用描述:     public int size() :返回set中元素的数目,如果set包含的元素数大于

lee_hust的专栏 478

Java集合类的学习(四)——Set

1.5        Set 1.5.1        概述 Java 中的Set和正好和数学上直观的集(set)的概念是相同的。Set最大的特性就是不允许在其中存放的元素是重复的。根据这个特点,我们就可以使用Set 这个接口来实现前面提到的关于商品种类的存储需求。Set 可以被用来过滤在其他集合中存放的元素,从而得到一个没有包含重复新的集合。 1.5.2        常用方法 按照定义

Jmark 1251

java储存键值对的集合_java基础学习(11)JAVA 集合类List、Set和Map

1.集合堆栈和队列数据结构的特点:堆栈数据结构先进后出,后进先出;队列结构是先进先出,后进后出。1.1 什么是集合存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。集合的出现就是为了持有对象。集合中可以存储任意类型的对象,而且长度可变。在程序中有可能无法预先知道需要多少个对象, 那么用数组来装对象的话, 长度不好定义,...

weixin_34511324的博客 4136

Java的集合类介绍

关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。Java基础部分算法与编程数据库部分流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。

2401_83817916的博客 1008

JAVA集合类总结以及写博客的初衷

写博客的初衷 ##第一次写博客,其实主要是记录自己的Android学习之路,希望学习可以系统的的学习,循序渐进,最后对技术有一个深入的理解,我这里主要参考了一个大牛的文章吧,大家可以去看他的,总结的很到位,很系统。https://github.com/LRH1993/android_interview。写博客的思路 ##我比较懒吧,总喜欢有一个提纲挈领的内容,每次看这些东西就可以知道,每个部分需要掌

super_lee54的博客 217

Java学习日记:集合类

在java中,集合类包含于java.util包,这些集合类又称为容器,可用于存储数据。与数组不同,集合类的长度是可以根据数据个数变化的,而且用来存在对象的引用。常用的集合类包括List集合、Set集合、Map集合,其中Set和List都继承了Collection接口。 各个常用集合类的继承关系如下图。 Colletcion类 Collection接口一般不直接使用,该接口提供了添加、删除、管理数...

小歪歪的博客 251

Java集合类简述

ArrayList :基于动态数组实现,支持快速随机访问,插入和删除元素在中间位置时效率较低。- LinkedList :基于双向链表实现,在列表头和尾添加或删除元素效率高,随机访问效率较低。- LinkedHashSet :继承自 HashSet ,维护了元素的插入顺序。- PriorityQueue :优先级队列,元素按照自定义的优先级顺序出队。- HashSet :基于哈希表实现,不允许重复元素,元素无序。- HashMap :基于哈希表实现,不保证键值对的顺序。

m0_57836225的博客 505

Java集合类常见面试知识点总结

Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾。 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.youkuaiyun.com/column/details/21930.html 里面有包括Java集合类在内的众多Java核心技术系列文章。 以下总结不保证全对,如有错误,还望能够指出,谢谢。 最后,如果想要更好地完成这部分内容的学习,...

Java技术江湖 1793

Java 各集合类比较

文章目录写在前面1.List1.1 ArrayList1.2 LinkedList1.3 Vector2.Set2.1 HashSet2.2 TreeSet2.3 LinkedHashSet3.1 HashMap3.2 TreeMap3.3 LinkedHashMap3.4 HashTable4.集合与数组比较5.一些问题 写在前面 下面先定一个规定: Order(O1)表示有序,Disor...

abcnull 的博客 708

Java集合类都有哪些?

Collection 是所有单列集合的父类,Collection 又分为两种单列集合 -- List 、Set Map 是所有双列集合的父类,一次添加一对元素

Fearless____的博客 314
上一篇: Java集合类学习--List
下一篇: Java集合类学习--Vector
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值