黑马程序员_集合2-set集合派系

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


|---Set集合派系
     集合中存储的对象是无序的
     集合中中存储的对象不允许重复
     这个排序没有索引
     方法 add addAll remove retain  contain clear size
|--Set集合派系分支
  |---HashSet
    可以存储null这个元素
     底层数据结构是hash表(桶子结构)
     存储对象的依据是对象的hash值
     如果存储的两个对象的hash值不同,开辟两个空间来存储这两个对象
     如果存储的两个对象的hash值相同,
       HashSet调用对象中的equals方法,将另一个对象传递进来,当equals返回假时,挂靠在桶子里
       HashSet调用对象中的equals方法,将另一个对象传递进来,当equals返回真,判断同一对象,不存
     线程不安全
     在使用HashSet的时候,不关注这个集合,关注的是集合中存储的对象
      这个对象必须覆盖hashCode()equals()方法,才能保证集合中的对象的唯一性
   |--TreeSet
TreeSet集合,对于存储在这个集合内的对象,TreeSet会对存储的对象进行自然顺序的排序
 既然要对集合中的对象进行排序,要求这个对象必须具备比较性
Person类不能被转换成java.lang.Comparable接口
Person类必须要实现Comparable接口。覆盖compareTo()方法
底层数据结构是二叉树
TreeSet集合自身具备比较性
TreeSet构造方法,传递一个比较器对象 Comparator实现类对象就可以了
自定义比较器,定义类,实现Comparator,覆盖compare(Object o1,Object o2)方法
============================================================================================================
Set集合中的小弟 HashSet


import java.util.*;
import cn.itcast.list.Person;
public class HashSetDemo {
public static void main(String[] args) {
// Object o = new ObjectI();
// o.hashCode();
HashSet hs = new HashSet();
hs.add(new Person("lisi1",21));
hs.add(new Person("lisi2",22));
hs.add(new Person("lisi3",23));
hs.add(new Person("lisi2",22));
hs.add(new Person("lisi0",20));
hs.add(new Person("lisi0",20));
//System.out.println(hs);
Iterator it = hs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
=========================================================================================================
自定义的比较器
 */
import java.util.Comparator;
import cn.itcast.list.Person;
public class MyComparator implements Comparator {
// int compare(T o1, T o2)  
public int compare(Object o1,Object o2){
Person p1 = (Person)o1;
Person p2 = (Person)o2;
//按照姓名为主要依据排序,如果姓名相同,则比较年龄
int num = p1.getName().compareTo(p2.getName());
return num == 0 ? p1.getAge() - p2.getAge():num;
}
}
========================================================================================================
TreeSet集合
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new MyComparator());
ts.add(new Person("lisi1",21));
ts.add(new Person("lisi2",22));
ts.add(new Person("lisi3",20));
ts.add(new Person("lisi6",20));
ts.add(new Person("lisi4",24));
/*ts.add(123);
ts.add(33);
ts.add(15);
*/
/*ts.add("abc1");
ts.add("abc2");
ts.add("abc5");
ts.add("aac5");
ts.add("abc3");
ts.add("abc6");
ts.add("abc4");
ts.add("aaa");*/
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}

========================================================================================================
public class TreeSetTest {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new StringLength());
ts.add("法拉利");
ts.add("中国");
ts.add("拖拉机");
ts.add("金刚葫芦娃");
ts.add("小面");
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}


//自定义比较,实现字符串的长度排序
class StringLength implements Comparator{
public int compare(Object o1,Object o2){
String s1 = (String)o1;
String s2 = (String)o2;
//长度为主要依据
int length = s1.length() - s2.length();
return length == 0 ? s1.compareTo(s2):length;
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值