集合类的分析

实验中遇到许多关于集合类的使用,在这里简单陈述一下

一、整理:
     看到array,就要想到角标。
     看到link,就要想到first,last。
     看到hash,就要想到hashCode,equals.
     看到tree,就要想到两个接口。Comparable,Comparator。
1.List
泛型列表,通常定义为
ArrayList<> list = new ArrayList<>();
List<> list = new ArrayList<>();
列表中我们合一通过get方法,读取数据,add方法添加数据,remove方法可以去除特定的数据
最主要的是其为动态数组

并且我们可以通过定义指针(java中没有指针,知果果是采取指针的作用),来实现队列与栈的操作。
2.Queue
通过起名我们可以看出,此为一个队列,因而我们可以在此进行队列的各种操作
Queue<Person> queue = new LinkedList<Person>();
此为其定义
3.Set
 1.它不允许出现重复元素;
 2.不保证集合中元素的顺序
 3.允许包含值为null的元素,但最多只能有一个null元素。
其定义为    set  没有下标
Set<String> ss=new HashSet<String>();
HashSet类直接实现了Set接口, 其底层其实是包装了一个HashMap去实现的。HashSet采用HashCode算法来存取集合中的元素,因此具有比较好的读取和查找性能。
添加元素还是add方法
长度size()
size()没有修改的方法
set在删除元素时,由于没有坐标,所以删去的时
eg:
remove(Object) 和removeAll(Set)
ss.remove("d");
其中remove是将Set中有的元素全部删除
4.Map
  • Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value;
  • Map中的键值对以Entry类型的对象实例形式存在;
  • 建(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值。
  • Map支持泛型,形式如:Map<K,V>
  • Map中使用put(K key,V value)方法添加
HashMap类
  • HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现
  • HashMap中的Entry对象是无序排列的
  • Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射(key值不可重复)


源码的分析

一,我们首先说的是Colletion类
Colltion类是一个接口,他的两个主要的分支是List和Set。
List和Set都是接口,他们继承与Colletion类
为了方便,我们抽象出AbstractCollection类来让其他类继承,该类实现类Collection中的绝大部分方法。AbstractList和AbstractSet都继承与AbstractCollection,具体的List实现类继承与AbstractList,而Set的实现类则继承与AbstractSet。  另外,Collection中有个iterator()方法,它的作用是返回一个Iterator接口。通常,我们通过Iterator迭代器来遍历集合。ListIterator是List接口所特有的,在List接口中,通过ListIterator()返回一个ListIterator对象。
1)首先我们来看这些类的基本定义以及API接口
Colletion定义为,public interface Colletion <E> extends Tterable<E> {}
List定义为 public interface List<E> extends Colltion <E> {}
Set 定义为
public interface Set<E> extends Collection<E> {}
Set 与 Colltion 相似
Collection集合的更加高级的功能

大家都用过 Collections.unmodifiableXXX() 来做一个不可修改的集合。例如你要构造存储常量的 Set,可以这样来做 :
Set<String> set = new HashSet<String>(Arrays.asList(new String[]{"RED", "GREEN"}));
Set<String> unmodifiableSet = Collections.unmodifiableSet(set);
每次调 unmodifiableSet.add() 都会抛出一个 UnsupportedOperationException。
下面看看 ImmutableSet 是怎么来做地更安全和简洁 :
ImmutableSet<String> immutableSet = ImmutableSet.of("RED", "GREEN");
就这样一句就够了,而且试图调 add 方法的时候,它一样会抛出 UnsupportedOperationException。重要的是代码的可读性增强了不少,非常直观地展现了代码的用意。
ImmutableSet<String> immutableSet = ImmutableSet.copyOf(set);
从构造的方式来说,ImmutableSet 集合还提供了 Builder 模式来构造一个集合 :
Builder<String> builder = ImmutableSet.builder();
ImmutableSet<String> immutableSet = builder.add("RED").addAll(set).build();
在这个例子里面 Builder 不但能加入单个元素还能加入既有的集合。
除此之外,Guava Collections 还提供了各种 Immutable 集合的实现:ImmutableList,ImmutableMap,ImmutableSortedSet,ImmutableSortedMap。

MapMaker: 超级强大的 Map 构造工具

MapMaker 是用来构造 ConcurrentMap 的工具类。为什么可以把 MapMaker 叫做超级强大?看了下面的例子你就知道了。首先,它可以用来构造ConcurrentHashMap:得到线程安全的hashMap
//ConcurrentHashMap with concurrency level 8
ConcurrentMap<String, Object> map1 = new MapMaker()
.concurrencyLevel(8)
.makeMap();
者构造用各种不同 reference 作为 key 和 value 的 Map:
//ConcurrentMap with soft reference key and weak reference value
ConcurrentMap<String, Object> map2 = new MapMaker()
.softKeys()
.weakValues()
.makeMap();
或者构造有自动移除时间过期项的 Map:存放30秒后移除,可以用于存放请求的场景
//Automatically removed entries from map after 30 seconds since they are created
ConcurrentMap<String, Object> map3 = new MapMaker()
.expireAfterWrite(30, TimeUnit.SECONDS)
.makeMap();
或者构造有最大限制数目的 Map:限制存放数据
//Map size grows close to the 100, the map will evict
//entries that are less likely to be used again
ConcurrentMap<String, Object> map4 = new MapMaker()
.maximumSize(100)
.makeMap();
或者提供当 Map 里面 get 不到数据,它能够自动加入到 Map 的功能。这个功能当 Map 作为缓存的时候很有用 :
//Create an Object to the map, when get() is missing in map
ConcurrentMap<String, Object> map5 = new MapMaker()
.makeComputingMap(
new Function<String, Object>() {
public Object apply(String key) {
return createObject(key);
}});
这些还不是最强大的特性,最厉害的是 MapMaker 可以提供拥有以上所有特性的 Map:
//Put all features together!
ConcurrentMap<String, Object> mapAll = new MapMaker()
.concurrencyLevel(8)
.softKeys()
.weakValues()
.expireAfterWrite(30, TimeUnit.SECONDS)
.maximumSize(100)
.makeComputingMap(
new Function<String, Object>() {
public Object apply(String key) {
return createObject(key);
}});
Guava Collections 的 jar 包 guava-r09.jar 及其依赖包 guava-r09-gwt.jar,javadoc,源代码,readme 等文件



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值