day17(HashSet,TreeSet)
来源:互联网 发布:淘宝怎么设置客服认证 编辑:程序博客网 时间:2024/06/16 09:32
一.HashSet
1.Set集合
*一个不包含重复元素的 collection,且无顺序
2.HashSet存储自定义对象保证元素唯一性
public class temp2 { public static void main(String[] args) { HashSet<String> sSet = new HashSet<>(); sSet.add("a"); sSet.add("b"); sSet.add("a"); System.out.println(sSet); }}// b a
3.HashSet如何保证元素唯一性的原理
a.HashSet原理
* 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数 * 当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象 如果没有哈希值相同的对象就直接存入集合 如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存
b.将自定义类的对象存入HashSet去重复
* 类中必须重写hashCode()和equals()方法* hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)* equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
4.LinkedHashSet的概述和使用
5.练习题
- a.产生10个1-20之间的随机数要求随机数不能重复
- b.用Scanner从键盘读取一行输入,去掉其中重复字符
/*使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符 * aaaabbbcccddd*/public class Temp7 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一行字符:"); String string = scanner.nextLine(); char[] cs = string.toCharArray(); Set<Character> cSet = new HashSet<Character>(); for (Character character : cs) { cSet.add(character); } System.out.println(cSet); }}
- c.将集合中的重复元素去掉
public class Temp { /* * 将集合中的重复元素去掉 */ public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(4); list.add(5); list.add(45); list.add(4); list.add(45); System.out.println(list); Set<Integer> set = new HashSet<>(); set.addAll(list); list.clear(); list.addAll(set); System.out.println(list); }}
二.TreeSet
1概念
*使用元素的自然顺序(Comparable接口)对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
2.TreeSet存储自定义对象
//创建Person对象,并实现Comparable接口public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { super(); 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; } @Override //参数p为已创建的Person对象 public int compareTo(Person p) { // 比较名字,即比较字符串 // return this.name.compareTo(p.name); // 比较年龄 // return this.age - p.age; // 按照姓名的长度排序 return this.name.length() - p.name.length(); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }}public class Temp12 { public static void main(String[] args) { TreeSet<Person> tSet = new TreeSet<>(); tSet.add(new Person("ass", 23)); tSet.add(new Person("ds", 13)); tSet.add(new Person("essss", 21)); tSet.add(new Person("bsss", 17)); List<Person> list = new ArrayList<>(); list.addAll(tSet); for (Person person : list) { System.out.println(person); } }}
3.TreeSet保证元素唯一和比较器排序的原理及代码实现)
4.TreeSet原理
a.特点
* TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列
b.使用方式
- 自然顺序(Comparable)
- TreeSet类的add()方法中会把存入的对象提升为Comparable类型
- 调用对象的compareTo()方法和集合中的对象比较
- 根据compareTo()方法返回的结果进行存储
- 比较器顺序(Comparator)
- 创建TreeSet的时候可以制定 一个Comparator
- 如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
- add()方法内部会自动调用Comparator接口中compare()方法排序
- 调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数
- 两种方式的区别
- TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
- TreeSet如果传入Comparator, 就优先按照Comparator
- 自然顺序(Comparable)
5.集合框架练习
- a.在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复
- b.从键盘接收一个字符串, 程序对其中所有字符进行排序,例如键盘输入: helloitcast程序打印:acehillostt
- c.程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 把所有输入的整数倒序排列打印.
- d.键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。
6.List,Map总结
- List
- a.普通for循环, 使用get()逐个获取
- b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
- c.增强for循环, 只要可以使用Iterator的类都可以用
- d.Vector集合可以使用Enumeration的hasMoreElements()和nextElement()方法
- Set
- a.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
- b.增强for循环, 只要可以使用Iterator的类都可以用
- 普通for循环,迭代器,增强for循环是否可以在遍历的过程中删除
阅读全文
0 0
- day17(HashSet,TreeSet)
- HashSet、LinkedHashSet、TreeSet+JAVA学习笔记-DAY17
- HashSet,TreeSet
- TreeSet、HashSet
- HashSet#TreeSet
- HashSet与TreeSet
- TreeSet与HashSet比较
- HashSet, TreeSet, HashMap, TreeMap
- HashSet和TreeSet
- HashSet、LinkedHashSet和TreeSet
- HashSet,TreeSet区别
- HashSet Treeset区别
- HashSet和TreeSet
- 比较HashSet和TreeSet
- HashSet-TreeSet-LinkedHashSet
- HashSet、TreeSet和LinkedHashSet
- HashSet and TreeSet
- HashSet/LinkedHashSet/TreeSet
- Torch 使用总结
- Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目[Java通用框架源码及开发视频教程]
- Doctype Html的作用
- Android屏幕适配全攻略(最权威的官方适配指导)
- Computer Networking—— physical layer QA
- day17(HashSet,TreeSet)
- 微信小程序开发步骤讲解和实用小技巧
- MapReduce 原理与应用
- 《You Only Look Once:Unified,Real-Time Object Detection》笔记
- hpuoj【1034】交换最值的位置【数组】
- C# 添加、修改和删除PDF书签
- MySQL学习随记---存储过程
- HDU 1520-Anniversary party(树状DP入门)
- 集合框架——Collectios之替换翻转方法