黑马程序员-集合框架2


-----------
android培训java培训、java学习型技术博客、期待与您交流! ------------



1.Set类

1.1Set的特点:
元素无序,唯一。
注意:这里的顺序是指存储和取出顺序。

2.HashSet

2.1.HashSet:不保证元素的迭代顺序。并且,不保证该顺序恒久不变。
2.2.怎么保证元素唯一
HashSet底层数据结构是哈希表。
依赖两个方法:hashCode()和equals()
顺序:
首先,判断hashCode()值是否相同。
相同:
继续走equals()方法,根据其返回值:
true:说明元素重复,不添加到集合。
false:说明元素不重复,添加到集合。
不同:直接添加到集合。
2.3.如何重写hashCode()和equals()方法
hashCode():
把对象的所有成员变量值相加即可。
如果是基本类型,就加值。如果是引用类型,就加哈希值。
equals():
A:this==obj
B:!(obj instanceof Student)

C:所有成员变量的值比较。基本类型用==,引用类型用equals()。

我的代码:

	public int hashCode(){
		//根据自己的需求定义hashCode的算法.
		return name.hashCode()+age*17;
	}
	public void equals<Object>(Object obj){
		if(this==obj){
			return true;
		}else if(!(obj intstanceof Student)){
			return false;
		}else{
			return (obj.getName().equals(name) && obj.getAge==age)?true:false;

2.4.案例
HashSet存储字符串并遍历
HashSet存储自定义对象并遍历
针对自定义对象:
需求:如果对象的成员都相同,就认为是同一个元素。


3.TreeSet

3.1.TreeSet:根据构造方法的不用,选择使用自然排序或者比较器排序。
        按照实际的需求,可以对元素进行排序。并且保证唯一。
3.2.如何保证

排序:

底层结构是二叉树。按照树节点进行存储和取出。

两种实现:
A:自然排序(元素具备比较性)
TreeSet的无参构造,要求对象所属的类实现Comparable接口。
B:比较器排序(集合具备比较性)
TreeSet的带参构造,要求构造方法接收一个实现了Comparator接口的对象。

唯一:根据返回值是否为0。


注意:

如果同时有两种方案,以比较器为主。

我的代码:

	//TreeSet底层是二叉树,所以是通过比较来comparaTo方法来判断元素的是否唯一.
	//对于需要存储进集合的元素,通过其自身的comparaTo方法来跟集合中已经存在的元素进行比较运算,返回值为int型数据,为0,则不加入集合,为负数,则反向加入,为正数则正向加入.
	//对于基本类型数据元素,因为其父类实现了Comparable接口,所以必然覆盖了comparaTo方法,可以不定义,直接调用compareTo进行比较.
	//对于自定义类,因为类中未定义comparaTo方法或者未实现Comparable接口,则需要自己在类中来实现ComparaTo接口,重写compareTo方法.方法中具体内容根据实际要求编写.或者在建立这个TreeSet时,就根据其构造函数传入一个自己定义的比较器.
		class Student implements Comparable{
			public int compareTo(Student stu){
				int num1 = this.name.length()-stu.name.length();
				int num2 = this.name.compareTo(stu.name);
				int num3 = this.age-stu.age;
				return (num1==0&&num2==0)?num3(num1==0)?num2:num1;
			}
		}


3.3.案例
TreeSet存储字符串并遍历
TreeSet存储Integer并遍历
TreeSet存储自定义对象并遍历


4.Collection体现的集合总结

Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高。
|--LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低。
|--Set 唯一
|--HashSet
底层数据结构是哈希表。
如何保证元素唯一性呢?
依赖两个方法。hashCode()和equals()。
以后都自动生成。
|--TreeSet

底层数据结构是二叉树。


如何保证元素唯一性呢?如何保证元素排序呢?
根据返回值是否是0,判断元素是否重复。
排序有两种方案:
元素具备比较性 实现Comparable接口
集合具备比较性 实现Comparator接口

5.集合中的数据结构

ArrayXxx:底层数据结构是数组。查询快,增删慢。
LinkedXxx:底层数据结构是链表。查询慢,增删快。
HashXxx:底层数据结构是哈希表。跟两个有关。hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种排序方式。Comparable接口和Comparator接口


6.如何选择Collection集合

元素是否唯一?
唯一:
Set
元素是否排序?
需要:TreeSet
不需要:HashSet
不知道是否排序,用HashSet。
不唯一:
List
需要安全码?
需要:Vector
不需要:ArrayList和LinkedList
查询多:ArrayList
增删多;LinkedList
不知道,用ArrayList。

7.Collections

7.1.Collections是针对Collection集合操作的工具类。
7.2.面试题

CollectionCollections的区别:

一个是Collection,集合体系不断向上抽取,最终得到的该体系的顶层类,定义了所有集合的共性内容.

一个是Collections,是一个类似于Arrays的静态工厂,基本上都是静态方法,是一个工具类.对集合进行加工.

7.3功能














-----------android培训java培训、java学习型技术博客、期待与您交流! ------------

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值