Java基础 集合

简介: 集合

Java基础

1.1 集合

Java的集合被定义在Java.util包中,主要有四种集合,分别为list,queue,set和map,每种集合的具体分类:
list: ArrayList,LinkList, Vector;
queue :ArrayBlockingQueue, linkdBlockingQueue, PriorityBlockingQueue, DeloyQueue;
set: HashSet, linkHashSet, TreeSet
Map: HashMap, HashMap, TreeMap;

1.1.1 List:可重复

List是非常重要的数据类型,是有序的Collection,一共有三个实现类,分别是ArryList,Vector,LinkedList.
1.ArryList:基于数组实现增删慢,查快,线程不安全
ArryList 是使用最广泛的list的实现类,其内部的数据结构是基于数组实现的,提供了对List的增加(add),删除(remove)和访问(get)功能。
Arrlist的缺点是对元素必须是连续存储,当需要向中间插入或删除数据时需要等待所有元素进行完,所以不适合随机的增删,适合随机的查找;
ArryList不需要定义数组长度,在长度不满足存储要求是会自动创建更大的数组将其已有数据复制到新数组。
2.Vector:基于数组实现增删慢,查快,线程安全
vector的数据库结构和ArryList一样,都是基于数组实现的,不同的是vector支持线程同步,同一时刻只允许一个线程进行读写操作来保证多线程下的数据一致性,但需要频繁vector实例进行加索的释放操作,因此,vector读写相对较慢;
3.LinkedList:基于双向链表实现,增删快,查慢,线程不安全
LinkedLIst采用的是双向链表对随机插入,删除数据相对较快,对数据的查找相对就慢;

##1.1.2Queue
queue是队列结构,Java常用一下结构;
ArrayBlockingQueue:基于数组结构实现的有界阻塞队列;
linkdBlockingQueue:基于链表数据结构实现的有界阻塞队列;
PriorityBlockingQueue:支持优先级排序的无界阻塞队列;
DeloyQueue:支持延时操作的无界阻塞队列;
## 1.1.3set:不可重复

Set核心是独一无二的性质,适用于存储无序且值不相等的元素。如果想要比较两个对象是否相等,则必须同时覆盖对象的hashCode方法和 equals方法,并且hashCode方法和 equals方法的返回值必须相同。

  1. HashSet: HashTable 实现,无序
    HashSet存放的是散列值,它是按照元素的散列值来存取元素的。元素的散列值是通过元素的 hashCode方法计算得到的,HashSet首先判断两个元素的散列值是否相等,如果散列值相等,则接着通过equals 方法比较,如果 equls方法返回的结果也为true,HashSet就将其视为同一个元素;如果 equals方法返回的结果为false,HashSet就不将其视为同一个元素。
    1. TreeSet:二叉树实现
      TreeSet基于二叉树的原理对新添加的对象按照指定的顺序排序(升序、降序),每添加一个对象都会进行排序,并将对象插入二叉树指定的位置。
  2. LinkHashSet: HashTable 实现数据存储,双向链表记录顺序
    LinkedHashSet 在底层使用LinkedHashMap存储元素,它继承了HashSet,所有的方法和操作都与hashSet相同。

    1.1.4 Map

  3. HashMap:数组+链表存储数据,线程不安全
    HashMap基于键的 HashCode值唯一标识一条数据,同时基于键的HashCode值进行数据的存取,因此可以快速地更新和查询数据,但其每次遍历的顺序无法保证相同。HashMap 的key 和 value允许为null。
  4. ConcurrentHashMap:分段锁实现,线程安全
    与HashMap不同,ConcurrentHashMap采用分段锁的思想实现并发操作,因此是线程安全的。ConcurrentHashMap由多个Segment组成( Segment 的数量也是锁的并发度),每个Segment 均继承自ReentrantLock 并单独加锁.所以每次讲行加锁操作时锁住的都是一个Sepment这样保证了每个线程的安全,也就实现了全局的线程安全
  5. HashTable:线程安全
    HashTable是遗留类,很多映射的常用功能都与 HashMap类似,不同的是它继承自Dictionary类,并且是线程安全的,同一时刻只有一个线程能写HashTable,并发性不如ConcurrentHasbMap。
目录
相关文章
|
1月前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
40 6
|
1月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
38 3
|
1月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
33 2
|
1月前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
31 3
|
12天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
21 2
|
11天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
16天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
16天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
16天前
|
Java 开发者
|
28天前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
55 5