java集合-3

简介: -

Set接口

特点:无序、无下标、元素不可重复

方法:全部继承自Collection中的方法

增、删、遍历、判断与collection一致

HashSet

特点

存储结构:哈希表(数组+链表+红黑树)

存储过程(重复依据)

  1. 根据hashCode计算保存的位置,如果位置为空,直接保存,若不为空,进行第二步
  2. 再执行equals方法,如果equals为true,则认为是重复,否则形成链表

不理解

  • 基于HashCode计算元素存放位置
  • 利用31这个质数,减少散列冲突
  • 31提高执行效率31 * i = (i << 5) - i 转为移位操作
  • 当存入元素的哈希码相同时,会调用equals进行确认,如果结果为true,则拒绝后者存入

/**

* @author 伍六七

* @date 2022/8/12 21:49

*/

public class hashset_demo {

   public static void main(String[] args) {

       //新建集合

       HashSet<String> hashSet = new HashSet<String>();



       //添加元素

       hashSet.add("1");

       hashSet.add("1");

       hashSet.add("1");

       hashSet.add("2");

       hashSet.add("3");

       System.out.println(hashSet);//[1, 2, 3]


       //删除元素

       hashSet.remove("1");

       System.out.println(hashSet);//[2, 3]



       //遍历操作

       //1. 增强for

       for(String set:hashSet){

           System.out.print(set);//23

       }


       //2. 迭代器

       Iterator<String> it = hashSet.iterator();

       while(it.hasNext()){

           String s = it.next();

           System.out.printf(s+" ");//2 3

       }



       //判断

       System.out.println(hashSet.contains("2"));//true


       System.out.println(hashSet.isEmpty());//false

   }

}

SortedSet接口

TreeSet

特点

  • 基于排列顺序实现元素不重复
  • 实现SortedSet接口(如果实现该接口需要重写方法),对集合元素自动排序
  • 元素对象的类型必须实现Comparable接口指定排序规则,默认升序
  • 通过CompareTo方法确定是否为重复元素

存储结构:红黑树

常用方法

还是set方法

//创建集合

TreeSet<String> treeSet = new TreeSet<>();


//添加元素

treeSet.add();


//删除元素

treeSet.remove();


//遍历 1. 增强for 2. 迭代器


//判断

treeSet.contains();

补充:TreeSet集合的使用

Comparator 实现定制比较(比较器)

Comparable 可比较的

// 重写compare,算法也用到,也可以用Lambda表达式

@override

public int compare(Person o1, Person o2){

 int n1 = o1.getAge()-o2.getAge();

 int n2 = o1.getName().comareTo(o2.getName());

 return n1 == 0 ? n2 : n1;

}

目录
相关文章
|
7天前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
167 100
|
7天前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
161 101
|
20天前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
3月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
207 4
|
2月前
|
Oracle Java 关系型数据库
掌握Java Stream API:高效集合处理的利器
掌握Java Stream API:高效集合处理的利器
341 80
|
2月前
|
安全 Java API
Java 8 Stream API:高效集合处理的利器
Java 8 Stream API:高效集合处理的利器
233 83
|
12天前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
1月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
144 23
|
1月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
1月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
118 12