一、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); } |