A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Nrnnr110 中级黑马   /  2016-6-22 23:54  /  335 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

01_集合框架(HashSet存储字符串并遍历).

Set集合的特点
        存取无序,唯一,无索引

-------------------------------------------------------------------------------------------------------------------------------
02_集合框架(HashSet存储自定义对象保证元素唯一性).

要重写哪两个方法才能保证HashSet存储自定义对象保证唯一?
A:hashCode()
B:equals()

-------------------------------------------------------------------------------------------------------------------------------
03_HashSet存储自定义对象保证唯一性图解及优化.

如果判断两个对象不同依赖于hashCode()和equals().
        先使用hashCode判断
                        情况1 哈希值不同: 代表这两个对象不是同一个对象  (证明这两个对象属性一定不同)  哈希值不同直接存储
                        情况2 哈希值相同:
                                                子情况1:对象当中的属性值完全相同   不存
                                                子情况2:对象属性不同,但是相加结果相同
                                        !!如果哈希值相同我们就必须在用equals进行判断到底是子情况1还是子情况2
                                        如果是子情况1 则不添加
                                        如果是子情况2 则添加

哈希值不同的两个对象,属性值不同.
不同对象哈希值有可能相同


1、开发中怎样重写hashCode()和equals()?
自动生成。右键“source”,然后选择“Generate hashCode() and equals()”

以后如果遇到HashSet集合存储自定义对象,想要去重需要重写hashCode()和equals()

-------------------------------------------------------------------------------------------------------------------------------
04_集合框架(HashSet如何保证元素唯一性的原理).
-------------------------------------------------------------------------------------------------------------------------------
05_集合框架(LinkedHashSet的概述和使用).

LinkedHashSet特点
底层是链表结构,查询慢,增删快
它是Set体系下唯一一个能够保证怎么存就怎么取的集合
LinkedHashSet 它是HashSet的子类,所以保证元素唯一的用法和HashSet一致

-------------------------------------------------------------------------------------------------------------------------------
06_产生10个1-20之间的随机数要求随机数不能重复.

思路回顾
                A 创建一个集合,因为随机数不能重复所以选择HashSet
                B 通过while 循环把随机数添加到集合中    注意:循环的判断条件 使用集合的长度来判断
                C 遍历集合把所有随机数取出来.

-------------------------------------------------------------------------------------------------------------------------------
07_集合框架(练习).
使用 Scanner 从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符

思路回顾:
                        A 创建一个键盘录入对象,得到一个字符串
                        B 把字符串转换成字符数组
                        C 创建集合对象因为要求不重复,所以HashSet
                        D 通过增强for遍历char数组,得到每一个字符并存到集合中
                        E 遍历集合得到没有重复的数据.

-------------------------------------------------------------------------------------------------------------------------------
08_集合框架(练习).



-------------------------------------------------------------------------------------------------------------------------------
09_集合框架(TreeSet存储Integer类型的元素并遍历).

TreeSet集合的特点
                        1 继承自Set的三条特点
                        2 可以实现元素的排序.
                               

-------------------------------------------------------------------------------------------------------------------------------
10_集合框架(TreeSet存储自定义对象).
如果向TreeSet中储存自定义对象,想要实现排序那么必须完成以下两步操作
        1 对象所属的类去实现Comparable接口
        2 重写接口中的compareTo()方法.
             

-------------------------------------------------------------------------------------------------------------------------------
11_TreeSet保证元素唯一和自然排序的原理和图解.

TreeSet 底层结构:二叉树

那么,Treeset是如何存储数据的呢?
A:是拿第一个元素做为根节点,依次和其他元素比较
B:大了  往右放
   小了  往左放


从二叉树结构中取数据的内存规则
原则:从根节点开始,以左中右的原则取出

-------------------------------------------------------------------------------------------------------------------------------
12_集合框架(TreeSet存储自定义对象并遍历练习1).

TreeSet存储自定义对象并遍历练习1(按照姓名排序)
public int compareTo(Person o) {
        //
        //我们再去考虑如何去比较数据时,首要考虑的是这个数据的主要条件
        //我们在写一个方法是主要条件是比较容易分析出来的
        //次要条件才是难点
                int num = this.name.compareTo(o.name);                //主要条件
                return num == 0 ? this.age - o.age : num;        //次要条件
                                                                }
-------------------------------------------------------------------------------------------------------------------------------
13_集合框架(TreeSet存储自定义对象并遍历练习2).

public int compareTo(Person o) {
                int length = this.name.length() - o.name.length();                                //
                int num = length == 0 ? this.name.compareTo(o.name) : length;        //
                return num == 0 ? this.age - o.age : num;                                                //
        }


-------------------------------------------------------------------------------------------------------------------------------
14_TreeSet保证元素唯一和比较器排序的原理.

匿名内部类回顾:
                new Inter(){
                重写Inter中的抽象方法
                }

比较器接口:Comparator  重写 compare()  

使用比较器接口的方式:
                使用TreeSet的带参构造里面需要传递一个 Comparator 的子类对象.
       
        compar(Student s1 , Student s2){
                        s1 是新添加的元素
                        s2 是根节点
                }
        从小到大排序 s1 - s2
        从大到小排序 s2 - s1
-------------------------------------------------------------------------------------------------------------------------------
15_集合框架(TreeSet原理).
-------------------------------------------------------------------------------------------------------------------------------
16_集合框架(练习).


在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复

-------------------------------------------------------------------------------------------------------------------------------
17_集合框架(练习).

从键盘接收一个字符串, 程序对其中所有字符进行排序,例如键盘输入: helloitcast程序打印:acehillostt

-------------------------------------------------------------------------------------------------------------------------------
18_集合框架(练习).

程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 把所有输入的整数倒序排列打印.

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马