Java编程集合之HashSet+TreeSet

简介: 1.集合的应用 集合就是一个小容器 增删改查 2.集合使用的情形 各自集合的特点 3.底层原理 数据结构的存储方式 4.自己尝试实现

知识回顾

集合

   Collection  Map

   以value形式存储  以key-value形式存储

   List    Queue    Set

   有序可重复        无序无重复 key无序无重复value无序可重复

   ArrayList        HashSet HashMap

   Vector         TreeSet TreeMap

   Stack(LIFO)

   LinkedList

   add()         add()

   remove()         remove()

   set()

   get()         iterator()

   size()                size()

   1.集合的应用

集合就是一个小容器    增删改查

   2.集合使用的情形

各自集合的特点

   3.底层原理

数据结构的存储方式

   4.自己尝试实现

Collection 以value形式存在

   Set  无序无重复

   1.具体的实现类

HashSet

TreeSet

   2.基本的使用

   3.无序   无重复

无序:我们使用集合存放元素的顺序  集合内取出来的顺序不一致

集合本身是有自己的算法排布顺序  hash算法

HashSet---->(HashMap (数组+链表) 散列表 临接连表)

   1.java.util

   2.如何创建对象   无参数  有参数

   3.集合容器的基本使用

       增删改查

       boolean = add(value)   addAll(collection c)   retainAll   removeAll

       boolean = remove(Object)

       没有修改方法

       iterator()  获取一个迭代器对象

       size()

   4.无重复的原则

       首先通过String类型和Person类型存储

       大概猜测  无重复的原则  利用equals方法进行比较

       如果我们想要让Person对象的name一致 认为是同一个对象

       我们可以重写equals方法

       重写了equals方法  发现还没有产生无重复的效果

       证明可能原则不止equals一个方法这么简单

       还有另一个规则同时起着作用 hashCode方法  int

       五个Person对象只剩一个   第一次存储的   还是最后一次存储

       set集合是发现重复的元素 拒绝存入  存储的是第一个

       TreeSet-----(TreeMap 二叉树 利用Node(left item right))

       无序无重复  java.util

       无参数构造方法    带Collection构造方法

       基本常用方法

           add(E e)  iterator()  remove(E e)  没有修改  size()

       无重复的规则是如何实现的

       treeSet集合本身有顺序   我们指的无序存入的和取出来的不一致

       compareTo---->String类  按照字母的自然顺序排布(Unicode)

       如果想要把自己写的类型 比如Person对象存入TreeSet集合里

       不能随意的存储 需要让自己写的类先实现Comparable接口

目录
相关文章
|
3天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
23 3
|
30天前
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
10天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
14天前
|
算法 Java 调度
java并发编程中Monitor里的waitSet和EntryList都是做什么的
在Java并发编程中,Monitor内部包含两个重要队列:等待集(Wait Set)和入口列表(Entry List)。Wait Set用于线程的条件等待和协作,线程调用`wait()`后进入此集合,通过`notify()`或`notifyAll()`唤醒。Entry List则管理锁的竞争,未能获取锁的线程在此排队,等待锁释放后重新竞争。理解两者区别有助于设计高效的多线程程序。 - **Wait Set**:线程调用`wait()`后进入,等待条件满足被唤醒,需重新竞争锁。 - **Entry List**:多个线程竞争锁时,未获锁的线程在此排队,等待锁释放后获取锁继续执行。
49 12
|
10天前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
91 2
|
20天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
37 5
|
27天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
27天前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
50 3
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
43 4
|
1月前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
45 2