Java中集合知识点

简介: Java中集合知识点

文章目录

一、集合

二 、List集合

ArrayList集合的特点:

Vector集合的特点:

LinkedList集合的特点

三、Set 集合

HashSet集合的特点

TreeSet

LinkedHashSet

Queue

四、Map集合

1.HashMap集合的特点

Hashtable集合的特点

TreeMap集合的特点

一、集合

集合总主要是三种:List,Set,Queue

  1. Collection:是集合List,Set,Queue的基本的接口。
  2. Iterator:迭代器,提供方法访问集合中的数据。
  3. Map :是映射表的基础接口。

二 、List集合

ArrayList集合的特点:

  1. 排列有序,可重复

ArrayList<String> list = new ArrayList<>();

       list.add("b");

       list.add("a");

       list.add("a");

       System.out.println(list.get(0));

       System.out.println(list.get(1));

       System.out.println(list.get(2))

  1. 底层使用数组

   private static final Object[] EMPTY_ELEMENTDATA = {};

   /**

    * Shared empty array instance used for default sized empty instances. We

    * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when

    * first element is added.

    */

   private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

   /**

    * The array buffer into which the elements of the ArrayList are stored.

    * The capacity of the ArrayList is the length of this array buffer. Any

    * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA

    * will be expanded to DEFAULT_CAPACITY when the first element is added.

    */

   transient Object[] elementData; // non-private to simplify nested class access

  1. 速度快,增删慢
  2. 线程不安全
  3. 容量不够,ArrayList是当前容量*1.5+1
  4.  private void grow(int minCapacity) {

       // overflow-conscious code

       int oldCapacity = elementData.length;

       int newCapacity = oldCapacity + (oldCapacity >> 1);

       if (newCapacity - minCapacity < 0)

           newCapacity = minCapacity;

       if (newCapacity - MAX_ARRAY_SIZE > 0)

           newCapacity = hugeCapacity(minCapacity);

       // minCapacity is usually close to size, so this is a win:

       elementData = Arrays.copyOf(elementData, newCapacity);

   }

Vector集合的特点:

  1. 排列有序,可重复
  2. 底层使用数组
  3. 速度快,增删慢
  4. 线程安全,效率低
  5. 容量不够,默认扩展一倍容量

  private void grow(int minCapacity) {

       // overflow-conscious code

       int oldCapacity = elementData.length;

       int newCapacity = oldCapacity + ((capacityIncrement > 0) ?

                                        capacityIncrement : oldCapacity);

       if (newCapacity - minCapacity < 0)

           newCapacity = minCapacity;

       if (newCapacity - MAX_ARRAY_SIZE > 0)

           newCapacity = hugeCapacity(minCapacity);

       elementData = Arrays.copyOf(elementData, newCapacity);

   }

LinkedList集合的特点

  1. 排列有序,可重复
  2. 底层使用双向循环表数据结构。
  3. 查询速度慢,增加和删除快
  4. 线程不安全。


三、Set 集合

HashSet集合的特点

  1. 排列无序,不可重复
  2. 底层使用hash表实现
  3. 存取速度快
  4. 内部是HashMap

TreeSet

  1. 排列无序,不可重复
  2. 底层使用二叉树实现
  3. 排序存储
  4. 内部是TreeMap和sortedSet

LinkedHashSet

  1. 采用hash表存储,并用双向链表记录插入顺序。
  2. 内部是LinkedHashMap。

Queue

在两端出入的List,可以使用数组和链表实现。

四、Map集合

1.HashMap集合的特点

键不可重复,值可以重复。

底层哈希表

线程不安全

允许key值为null,value也可以为空。

capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。

loadFactor:负载因子,默认为 0.75。

threshold:扩容的阈值,等于 capacity * loadFactor

Hashtable集合的特点

  1. 键不可重复,值可重复
  2. 底层哈希表
  3. 线程安全
  4. key value都不允许为空

TreeMap集合的特点

  1. 键不可重复,值可重复
  2. 底层二叉树。
相关文章
|
2月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
52 3
|
2月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
60 5
|
3月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
72 4
|
3月前
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
75 13
|
3月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
3月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
62 2
|
3月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
3月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
3月前
|
Java 开发者
从 Java 中的 Set 集合中删除元素
【10月更文挑战第30天】
|
3月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
48 0