Java集合框架-Collection02- LinkedHashSet

简介: Java集合框架-Collection02- LinkedHashSet

堆栈 Stack:


表示一个先进后出的数据结构(用弹夹做一个例子,最先进的子弹最后被打出去)

 压:push

 弹:pop

package com.zking.Collection02.util;
/**
 * 目标:使用LinkedList实现堆栈功能
 * 特点:先进后出
 * @author Administrator
 *
 */
import java.util.LinkedList;
public class MyStack {
  //弹夹(LinkedList集合)
  private LinkedList lst = new LinkedList();
  /**
  * 压栈(装弹)
  * @param obj
  */
  public void push(Object obj) {
  lst.addFirst(obj);
  }
  /**
  * 出栈(开枪)
  * @return
  */
  public Object pop() {
  Object first = lst.getFirst();
  lst.removeFirst();
  return first;
  }
  public int size() {
  return lst.size();
  }
  public static void main(String[] args) {
  //初始化
  MyStack stack = new MyStack();
  //填充子弹
  stack.push("a");//第一粒  4
  stack.push("b");//第二粒  3
  stack.push("c");//.... 2
  stack.push("d");//第四粒  1
  stack.push("e");//第五粒  0
  while(stack.size()!=0) {
    Object val = stack.pop();
    System.out.println(val);
  }
  }
}

1. Set(用到了下面的HashSet类)

 1.1 特点:无序、对象不能重复

1)无序:元素的添加顺序和输出顺序不一致


2)唯一:不允许添加重复元素过滤了(被过滤了)


问题:元素是被覆盖还是被过滤了?

package com.zking.Collection02.util;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.zking.Collection02.entity.Student;
public class Demo1 {
  public static void main(String[] args) {
  //Set
  //1 特点:无序、对象不能重复
  //1)无序:元素的添加顺序和输出顺序不一致
  //2)唯一:不允许添加重复元素过滤了(被过滤了)
  //问题:元素是被覆盖还是被过滤了?
  /*Set<String> set = new HashSet<>();
  set.add("zs");
  set.add("ls");
  set.add("ww");
  set.forEach(System.out::println);*/
  Set<Student> set = new HashSet<>();
  set.add(new Student(1,"zs",100f));
  set.add(new Student(2,"ls",32f));
  set.add(new Student(3,"ww",33f));
  set.add(new Student(1,"zs",100f));
  //1)默认使用equals比较,Object类型是引用类型,默认比较的是内存地址
  //2)重写hashcode和equals方法,先比较hashcode值是否相同,在比较equals
  //2.1)hashcode值相同,则比较equals
  //2.2)hashcode值不相同,则不比较equals
  /*Student stu = new Student();
  stu.equals(null);*/
  //set.forEach(System.out::println);
  }
}

1.2 遍历

   1.2.1 foreach

   1.2.2 迭代器

//2.遍历
     //1) foreach
  for (Student student : set) {
    System.out.println(student);
  }
  System.out.println("-----------------------------------------");
     //2) iterator(迭代器)   
  //获取迭代器
  Iterator<Student> it = set.iterator();
  //循环遍历
  while(it.hasNext()) {
    System.out.println(it.next());
  }

1.3 常用实现类

     HashSet

     TreeSet:根据某种(规则)对里面的元素进行排序

package com.zking.Collection02.util;
import java.util.Set;
import java.util.TreeSet;
import com.zking.Collection02.entity.Student;
public class Demo2 {
  public static void main(String[] args) {
  //TreeSet:以某种特定的规则对集合中的元素进行排序(升序和降序)
  //java.lang.Comparable:自然比较接口
  //Java.lang.Comparator:比较器(推荐)
  /*  Set<String> set1 = new TreeSet<>();
  set1.add("zs");
  set1.add("ls");
  set1.add("ww");*/
  Set<Student> set = new TreeSet<>(new NameComparator());
  set.add(new Student(1,"zs",100f));
  set.add(new Student(2,"ls",32f));
  set.add(new Student(3,"ww",33f));
  set.forEach(System.out::println);
  }
}

自然比较接口: java.lang.Comparable

比较器: java.util.Comparator

String以AscII码进行比较,返回差值

LinkedHashSet:

 1)元素是有顺序的

 2)元素是不重复的

 3)底层数据结构是按照链表的结构存储的 Linked

相关文章
|
2月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
9天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
33 3
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
187 3
|
26天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
44 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
47 4
|
2月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
74 2
|
2月前
|
前端开发 Java 数据库连接
你不可不知道的JAVA EE 框架有哪些?
本文介绍了框架的基本概念及其在编程领域的应用,强调了软件框架作为通用、可复用的软件环境的重要性。文章分析了早期Java EE开发中使用JSP+Servlet技术的弊端,包括可维护性差和代码重用性低等问题,并阐述了使用框架的优势,如提高开发效率、增强代码规范性和可维护性及提升软件性能。最后,文中详细描述了几种主流的Java EE框架,包括Spring、Spring MVC、MyBatis、Hibernate和Struts 2,这些框架通过提供强大的功能和支持,显著提升了Java EE应用的开发效率和稳定性。
141 1
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
40 2
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
下一篇
开通oss服务