黑马程序员——Java集合体系之Set集合_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 黑马程序员——Java集合体系之Set集合

黑马程序员——Java集合体系之Set集合

 2013/10/6 3:45:54  吴兴峰  程序员俱乐部  我要评论(0)
  • 摘要:----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流!----------------------1:Set集合(1)Set集合的特点:元素无序,唯一。(2)Set的子类:Set|--HashSet底层数据结构是哈希表。是如何保证元素的唯一性的呢?依赖两个方法:hashCode()和equals()。首先判断hashCode()值是否相同。是:继续判断equals()的返回值true:元素重复。false:添加到集合。否
  • 标签:

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

1:Set集合

?(1)Set集合的特点:元素无序,唯一。
?(2)Set的子类:

??Set
???|--HashSet
????底层数据结构是哈希表。
????是如何保证元素的唯一性的呢?
?????依赖两个方法:hashCode()和equals()。
?????首先判断hashCode()值是否相同。
??????是:
???????继续判断equals()的返回值
????????true:元素重复。
????????false:添加到集合。
??????否:
???????直接添加到集合。
????|--LinkedHashSet
?????底层数据结构是哈希表和链表。
?????由哈希表保证元素的唯一。
?????由链表保证元素的有序。
???|--TreeSet
????底层数据结构是二叉树
????是如何保证元素的唯一性和排序的呢?
?????是根据自然排序或者比较器的返回值是否是0决定。
?????排序有两种方式:
??????自然排序:
???????对象具备比较性,自定义类实现Comparable接口
??????比较器排序:
???????集合具备比较性,接收Comparator的构造参数
?(3)HashSet代码体现 :
??需求:存储自定义对象,要求成员变量值都相同即为同一个对象。

??public class Student
??{

//姓名
???private String name;

//年龄
???private int age;

//无参构造方法

???public Student(){}

//有参构造方法

???public Student(String name,int age)
???{
????this.name = name;
????this.age = age;
???}
???
???//...getXxx()/setXxx()

//复写hashCode()方法

???public int hashCode()
???{
????return this.name.hashCode()+this.age*13;
???}

???public boolean equals(Object obj)
???{

//判断是否是同一个对象
????if(this==obj)
????{
?????return true;
????}

//判断是否属于本类对象

????if(!(obj instanceof Student))
????{
?????return false;
????}

//对对象进行类型转换

????Student s = (Student)obj;
????return this.name.equals(s.name) && this.age == s.age;
???}
??}

??实际操作代码自己补齐:
???

?(4)TreeSet代码体现:
??public class Student
??{

//姓名
???private String name;

//年龄
???private int age;

//无参构造

???public Student(){}

//有参构造方法

???public Student(String name,int age)
???{
????this.name = name;
????this.age = age;
???}
???
???//...getXxx()/setXxx()
??}

??public class TreeSetTest
??{
???public static void main(String[] args)
???{

//创建TreeSet集合对象并创建匿名内部类实现Comparator接口
????TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>(){

//实现接口中的compare方法
?????public int compare(Student s1,Student s2)
?????{
??????//...
?????}
????});

????//创建元素

????//添加元素

????//遍历
???}
??}
??
??源码分析:
???TreeSet(Comparator c) -- TreeMap -- put()

???TreeSet(传递一个具体的实现。)

?

???public class TreeMap
???{
????private Comparator c;
????public TreeMap(Comparator c)
????{
?????this.c = c;
????}

????public ? put()
????{
?????
????}?
???}

2:Collection集合的体现概述:
?Collection
??|--List
???|--ArrayList

???|--Vector

???|--LinkedList

??|--Set
???|--HashSet
????|--LinkedHashSet
???|--TreeSet
????Comparable
????Commparator

3:常见的数据结构特点
?ArrayXxx:底层数据结构是数组,查询快,增删慢。
?LinkedXxx:底层数据结构是链表,查询慢,增删快。
?HashXxx:底层数据结构是哈希表。保证唯一依赖两个方法:hashCode()和equals()
?TreeXxx:底层数据结构是二叉树。保证唯一依赖自然排序或者比较器排序。同时还能够保证有序。

4:我们到底什么时候使用谁
?是否唯一:
??是:Set
???是否排序:
????是:TreeSet
????否:HashSet

??用HashSet。

??不是:List
???是否线程安全:
????是:Vector
????否:ArrayList,LinkedList
?????查询多:ArrayList
?????增删多:LinkedList

??用ArrayList。
?用ArrayList。

5:遍历:
?List:
??迭代器
??普通for

??到底用谁?
???一般遍历的时候,肯定选择迭代器。
???但是,如果你在操作的过程中,要用到索引的值,请用普通for。
?Set:
??迭代器

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net
  • 相关文章
发表评论
用户名: 匿名