集合总结-02-----黑马程序员

ASP.Net+Android+IOS开发------期待与您交流

 

<集合框架>

<Set集合的使用及其方法>

  * Set 集合中的方法和Collection是一致的

1. Set集合的特点

  * Set集合中的存储的元素是不重复的

  * Set无序集合(存储和取出的顺序),没有索引

  * Set集合的取出方式 

     * 只有一种,迭代器

2. HashSet

  * 无序,不重复

  * 底层数据结构是 哈希表 桶装结构

  * 确定元素唯一性的依据是,元素的hashCode()返回值,和equals()方法返回值

      * 如果 对象的hashCode()返回值一样,并且equals方法返回值是真,HashSet判定是同一个元素

  * 存储到HashSet中的自定义的对象,必须覆盖hashCode() 和 equals()方法

  * HashSet先调用对象的hashCode()方法,如果一致,调用对象的equals比较,如果是true,不存储

3. TreeSet

  * 底层数据结构是二叉树

  * 存储自定义对象的时候

    * JDK1.5 & JDK1.7 存储一个就出异常

    * JDK1.6 存储一个,不出异常,2个以上就出异常

  * 存储在集合内的对象,进行自然排序

  * 对象必须具备比较性

下面是TreeSet集合的二叉树示意图:

  * 当存储的自定义对象中的排序方式,不符合要求,不能去修改原始代码

    * 需要改变当前对象的排序方式,让我们的集合TreeSet自己具备比较性

  * TreeSet集合自己可以具备比较性,在new TreeSet对象的时候,构造方法中,传递一个比较器对象

    * 这个比较器,必须实现Comparator接口,在TreeSet构造方法中,传递的参数是Comparator接口的

        实现类对象

  * 玩TreeSet,其实在玩比较器

     * 存储的对象自己具备比较性,对象实现Comparable接口

     * TreeSet自己具备比较性,自定义比较器类,实现Comarator接口

  4. 模拟用户登录注册,名和密码

   4.1 用户可以操作的界面,用控制台来替代

     * 菜单选项,1 登录 2 注册  

   4.2 选择注册

     * 提示输入用户名,密码,确认密码

       * 输入信息完毕后,判断密码是否一致

       * 去存储用户信息的集合中,找用户名

          * 找到了,注册失败,返回注册吗,提示。。。用户名已经存在

  * 找不到,注册成功,集合中存储用户名和密码,提示,,,,注册成功

   4.3 选择登陆

     * 提示输入用户名,密码

     * 信息输入完毕后,到集合中,查找用户名和密码

       * 查到了,登陆成功  提示。。。登陆成功

       * 查询不到,登陆失败  提示。。。登陆失败

 * TreeSet
 * Exception in thread "main" java.lang.ClassCastException:类型转换异常
 *  cn.itcast.collection.Person cannot be cast to java.lang.Comparable
 * 
 *  异常中文解释:Person类,不具备自然排序功能
 *  如果Person类,实现了Comparable接口,这个就具备了自然排序
 *  Person类,不具备比较性
 * 
 *  需要我们做的,就是Person类,实现Comparable接口,覆盖掉接口中的抽象方法,compareTo()
 *  compareTo()就是我们Person类的自然排序功能,如何给Person进行自然排序,排序后的结果是什么
 *  完全取决于这个compareTo()方法

 

import java.util.*;
public class TreeSetDemo {

	public static void main(String[] args) {
		//method();
		/*为什么 比较方法CompareTo()返回值是int
		/CompareTo()比较的结果三种,负数 0 正数
		 * 前面小,返回负数
		 * 相等返回 0 
		 * 前面大,返回正数
		 */
		
		System.out.println("你好".compareTo("我好"));
	}
	private static void method(){
		TreeSet ts = new TreeSet();
		//ts.add(new Person("lisi",23));
		ts.add(123);
		ts.add(432);
		ts.add(2345);
		ts.add(23);
	
		Iterator it = ts.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}

}


ASP.Net+Android+IOS开发------期待与您交流

 详细请查看:http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值