集合框架(3)

Set子接口

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

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

package United;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;//测试Set接口的使用
public class Demo08 {public static void main(String[] args) {//创建集合Set<String> a = new HashSet<>();//添加数据a.add("华为");a.add("魅族");a.add("小米");System.out.println("数据个数:"+a.size());System.out.println(a);//删除数据//a.remove("华为");//System.out.println(a);//遍历for (String s:a) {System.out.println(s);}System.out.println("==================");Iterator<String> b = a.iterator();while (b.hasNext()){System.out.println(b.next());}//判断System.out.println(a.contains("华为"));System.out.println(a.isEmpty());}
}

HashSet【重点】

基于HashCode计算元素存放位置。

当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入。

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

存储过程:

  1. 根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步。
  2. 再执行equals方法,如果equals方法为true,则认为是重复,否则,形成链表
package United;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person[name="+name+",age="+age+"]";}@Overridepublic int hashCode() {int n1 = this.name.hashCode();int n2 = this.age;return n1+n2;}@Overridepublic boolean equals(Object obj) {if (this==obj){return true;}if (obj==null){return false;}if (obj instanceof Person){Person p = (Person) obj;if (this.name.equals(p.getName())&&this.age==p.getAge()){return true;}}return false;}
}
package United;import java.util.HashSet;
import java.util.Iterator;//HashSet集合的使用(2)
/*存储过程:1. 根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步。2. 再执行equals方法,如果equals方法为true,则认为是重复,否则,形成链表*/
public class Demo0902 {public static void main(String[] args) {//创建集合HashSet<Person> a = new HashSet<>();//添加数据Person p1 = new Person("邱淑贞",45);Person p2 = new Person("张柏芝",43);Person p3 = new Person("章子怡",42);a.add(p1);a.add(p3);a.add(new Person("张柏芝",43));//这里重写了Person中的HashCode方法,所以能添加进来(在没有重写equals方法的时候),重写了equals后不能加进来equals判断比HashCode高层级a.add(p2);//重复元素不能添加System.out.println("元素的个数:"+a.size());System.out.println(a.toString());//删除数据//a.remove("张柏芝");//System.out.println("删除之后:"+a.size());//遍历for (Person p:a) {System.out.println(p);}System.out.println("=======================");Iterator<Person> b = a.iterator();while (b.hasNext()){System.out.println(b.next());}//判断System.out.println(a.contains("张柏芝"));System.out.println(a.isEmpty());}
}

TreeSet

基于排列顺序实现元素不重复。

实现了SortedSet接口,对集合元素自动排序。

元素对象的类型必须实现Comparable接口,指定排序规则。

通过CompareTo方法确定是否为重复元素。

package United;import java.util.Iterator;
import java.util.TreeSet;//TreeSet的使用
public class Demo10 {public static void main(String[] args) {//创建集合TreeSet<String> a = new TreeSet<>();//添加元素a.add("xyz");a.add("def");a.add("abc");System.out.println("元素个数:"+a.size());System.out.println(a);//删除数据//a.remove("xyz");//遍历for (String s:a) {System.out.println(s);}System.out.println("====================");Iterator<String> b = a.iterator();while (b.hasNext()){System.out.println(b.next());}//判断System.out.println(a.contains("xyz"));System.out.println(a.isEmpty());}
}
package United;public class Person implements Comparable<Person>{private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person[name="+name+",age="+age+"]";}//先按姓名比再按年龄比@Overridepublic int compareTo(Person o) {int n1 = this.getName().compareTo(o.getName());int n2 = this.age-o.getAge();return n1 == 0?n2:n1;}
}
package United;import java.util.Iterator;
import java.util.TreeSet;//使用TreeSet保存数据
//要求:元素必须实现Comparable接口,compareTo();方法返回值为0,认为是重复元素
public class Demo11 {public static void main(String[] args) {//创建集合TreeSet<Person> a = new TreeSet<>();//添加元素Person p1 = new Person("邱淑贞",45);Person p2 = new Person("张柏芝",43);Person p3 = new Person("章子怡",42);a.add(p1);a.add(p2);a.add(p3);System.out.println("元素个数:"+a.size());System.out.println(a);//删除//a.remove(p1);//遍历for (Person p:a) {System.out.println(p);}System.out.println("=====================");Iterator<Person> b = a.iterator();while (b.hasNext()){System.out.println(b.next());}//判断System.out.println(a.contains(new Person("章子怡",42)));System.out.println(a.isEmpty());}
}
package United;import java.util.Comparator;
import java.util.TreeSet;//TreeSet集合的使用
//Comparator:实现定制比较(比较器)
public class Demo12 {public static void main(String[] args) {//创建集合并指定规则TreeSet<Person> a = new TreeSet<>(new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {int n1 = o1.getAge()- o2.getAge();int n2 = o1.getName().compareTo(o2.getName());return n1==0?n2:n1;}});Person p1 = new Person("邱淑贞",45);Person p2 = new Person("张柏芝",43);Person p3 = new Person("章子怡",42);a.add(p1);a.add(p2);a.add(p3);System.out.println("元素的个数:"+a.size());System.out.println(a);}
}

TreeSet案例

package United;import java.util.Comparator;
import java.util.TreeSet;//TreeSet案例
//要求:实现字符串按照长度进行排序
//helloworld  zhang  lisi  wangwu  beijing xian nanjing
public class Demo13 {public static void main(String[] args) {//创建集合,并指定比较规则TreeSet<String> a = new TreeSet<>(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {int n1 = o1.length()-o2.length();int n2 = o1.compareTo(o2);return n1==0?n2:n1;}});a.add("helloworld");a.add("zhang");a.add("lisi");a.add("wangwu");a.add("beijing");a.add("xian");a.add("nanjing");System.out.println(a);}
}

Day 21 集合框架(3)相关推荐

  1. 【Java集合框架】ArrayList类方法简明解析(举例说明)

    本文目录 1.API与Java集合框架 2.ArrayList类方法解析 2.1 add() 2.2 addAll() 2.3 clear() 2.4 clone() 2.5 contains() 2 ...

  2. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  3. java 面试 框架_这份java集合框架面试题,轻松搞定面试官!

    集合框架 1. ArrayList 和 Vector 的区别. 这两个类都实现了 List 接口(List 接口继承了 Collection 接口),他们都是有序集 合,即存储在这两个集合中的元素的位 ...

  4. Java核心技术点之集合框架

    1. 概述     Java集合框架由Java类库的一系列接口.抽象类以及具体实现类组成.我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据.集合类型就是容纳这些对象的一个容 ...

  5. 关于comparable与comparator的用法(即自定义集合框架用法 )

    1 package javastudy; 2 3 import java.util.Comparator; 4 import java.util.Iterator; 5 import java.uti ...

  6. 判断两个list集合里的对象某个属性值是否一样_第七章 集合框架

    第一节 集合和数组 1.1 为什么使用集合 数组缺点:长度固定,没有办法动态扩展 集合框架 集合框架简化图 1.2 Collection接口 第二节 List接口 特点:有序.允许重复 有序集合(也称 ...

  7. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

  8. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

  9. 黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入

    ------- android培训.java培训.期待与您交流! ---------- 黑马程序员-----集合框架类(四) 高级for循环.方法的可变参数及静态导入 1.1 高级for循环(示例1) ...

最新文章

  1. win10 输入法不见了、繁体 问题解决
  2. Filebeat的下载(图文讲解)
  3. 谁是最强的女汉子_JAVA
  4. avalon2学习教程04显示隐藏处理
  5. python在职场的用处大吗_Python未来发展怎么样,未来办公是否都需要精通Python?...
  6. (转)USB体系结构
  7. python+appium自动化测试元素定位
  8. http发送16进制报文_图解HTTP 第三章HTTP报文内的HTTP信息
  9. 如何把IDEA项目与上传到Git中
  10. 同态滤波与Retinex
  11. 用AD画PCB流程介绍
  12. centos配置静态ip和路由
  13. OSChina 周三乱弹 ——程序员是将咖啡转变成代码的工具
  14. Adobe ColdFusion
  15. FPS的瞄准准心的一种写法
  16. 代码提交到GitHub时出现的反复报错
  17. python单片机自动浇花_MicroPython实例之TPYBoardv102自动浇花系统
  18. 我可以在iPad上使用WhatsApp吗?
  19. java gis地图开发视频_开源GIS视频教程
  20. Java 设计一个抽象类Printer和它的两个子类BlackPrinter(黑白打印机)和ColorPrinter(彩色打印机)

热门文章

  1. C语言scanf输入字符串,举例详解
  2. MEXGroup:$50免费账户丨晚间专题技术报告2020-07-23
  3. 聊聊React Native屏幕适配那些事儿
  4. SAP常见问题及解决方法
  5. java中forward和redirect_jsp中forward和redirect的区别
  6. 终究,迎来了自己职场生涯的第一次离职
  7. 太原师范学院有没有计算机专业,太原师范学院
  8. Nvidia GPU 入门教程之 03 在 GPU 上运行 Python 脚本,对比cpu与gpu性能,检测a100性能(教程含源码)
  9. 百度地图坐标转换为gps_百度地图与中交兴路合作,为大卡司机提供专业导航服务...
  10. 记录FTPClient 超时处理的相关问题