day3.23总结_Set和Map

一、Set

1、HashSet

(1)特点:无序,唯一

(2)如何保证每个对象不同

当将一个对象存储到HashSet集合时,首先会调用对象的hashCode方法获得

一个整数值,底层会根据此整数值计算对象在Hash表中的一个存储位置,当多个对象的HashCode值相同时,此时会调用对象的equals方法进行比较,假如equals方法比较的内容也相同,此是对象不再进行存储,假如equals

方法比较的结果不同,此时在相同位置进行链式存储。

2、LinkedHashSet

(1)特点:可以记录存放的顺序

3、TreeSet

(1)特点:可以对集合的元素进行排序

(2)作用:放一个Collection到TreeSet中,就可以对集合排序。

TreeSet<String> tset=new TreeSet(Collection(? extends E) c)

String names[]={"AAA","CCC","MMM","CCC","DDD"};

      List<String> list=

      Arrays.asList(names);         

      TreeSet<String> tset=new TreeSet<String>(list);

(3)能够对集合中元素进行排序

a)Comparable(假如构建TreeSet时没有指定排序算法,被存储对象需实现此接口)

class Productimplements Comparable<Product>{

    /**此方法如何重写由业务而定*/

   @Override

   public int compareTo(Product o) {

      return this.name.compareTo(o.name);

      return n;

   } 

}

 

b)Comparator (构建TreeSet对象时,传入此对象作为比较算法)

TreeSet<Product> set=

      new TreeSet<Product>(new Comparator<Product>() {

         @Override

         public int compare(Product o1,

          Product o2) {

         return (int)(o1.price-o2.price);

         }

      });

 

 

二、Queue(了解,后面讲)

1.Queue(普通队列,继承Collection):接口

1)ConcurrentLinkedQueue

2)......

2.BlockingQueue(阻塞队列,继承Queue):接口

1)ArrayBlockingQueue (底层借助数组存储数据)(重点掌握)

a)put(E e) 放数据,满了则阻塞

b)take(E e) 取数据,没有则阻塞

2)LinkedBlockingQueue

 

三、Map

|------------HashMap (底层借助哈希表存储)

1)key不允许重复

2)key相同值覆盖

3)key无序(不保证添加顺序,也不会排序)

扩展:HashTable(线程安全的HashMap),了解。

 

|------------TreeMap (底层借助二叉排序树的结构进行存储)

1)key不允许重复

2)key相同值覆盖

3)能对key进行排序(要么key实现Comparable接口,要么指定comparator算          法)

|------------LinkedHashMap(链表+哈希表)

1)key不允许重复

2)key相同值覆盖

3)能保证key的添加顺序

|------------ConcurrentHashMap(高并发环境)

 

1、特点:键值对

2、如何判定key是否相同

第一步:判定key的hashCode值

第二步:假如key的hashCode相同,则调用key的equals方法进行比较。

注意:a、新new的对象hashcode有可能相同,但equals不同(因为内存地址不同)

         b、哈希吗值相同,但内存地址不同,它们会在哈希表上同一个哈希值上呈链式                存储

         c、null是个常量,作为key时,是同一个;

Map<Key,String> map=

      new HashMap<>();

      map.put(new Key(),"A");

      map.put(new Key(),"B");

      map.put(new Key(),"C");

      System.out.println(

      map.size());//3

      System.out.println(map);

      System.out.println(map.get(new Key()));//null

 

3、迭代

第一种:Entry方式

if(map.isEmpty())return;

      Set<Entry<String, Integer>> entrySet =map.entrySet();

      for(Entryentry: entrySet){

         String key = (String)entry.getKey();

         Object value = entry.getValue();

         System.out.println(key+":"+value);

      }

 

 

第二种:keySet

Set<String> keySet = map.keySet();

      for(Stringkey:keySet){

         Integer value = map.get(key);

         System.out.println(key+":"+value);

      }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值