###为什么要用immutable对象?immutable对象有以下的优点:
- 对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象
- 线程安全的:immutable对象在多线程下安全,没有竞态条件
- 不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加 有效的利用内存 (analysis)
- 可以被使用为一个常量,并且期望在未来也是保持不变的
###Immutable集合使用方法: 一个immutable集合可以有以下几种方式来创建:
-
用copyOf方法, 譬如, ImmutableSet.copyOf(set)
-
使用of方法,譬如,ImmutableSet.of("a", "b", "c")或者ImmutableMap.of("a", 1, "b", 2)
-
使用Builder类
###下面看具体的代码: ###代码一
package immutable;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Created by pinker on 2017/2/8.
* 一个immutable集合可以有以下几种方式来创建:
1.用copyOf方法, 譬如, ImmutableSet.copyOf(set)
2.使用of方法,譬如,ImmutableSet.of("a", "b", "c")或者ImmutableMap.of("a", 1, "b", 2)
3.使用Builder类
*/
public class demo1 {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
List<String> immutableList= ImmutableList.copyOf(list);
List<String> readList= Collections.unmodifiableList(list);
list.add("E");
// readList.add("E");
System.out.println(readList);
// immutableList.add("E");//java.lang.UnsupportedOperationException
list.add("F");
System.out.println(immutableList);//原来的list添加元素并没有什么用!在readList中有新加入的元素,但是
//immutableList并不会新加入!
}
}
###结果:
[A, B, C, D, E]
[A, B, C, D]
Process finished with exit code 0
###代码二
package immutable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import java.awt.*;
import java.util.*;
/**
* Created by pinker on 2017/2/8.
*/
public class demo2 {
public static void main(String[] args) {
ImmutableSet<Color> immutableSet = ImmutableSet.<Color>builder()
.add(new Color(0, 182, 255))
.add(new Color(12, 241, 155))
.build();
System.out.println(immutableSet);
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
ImmutableMap<String, Integer> immutableMap = ImmutableMap.copyOf(map);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "-->" + entry.getValue());
}
java.util.List<String> list = new ArrayList<String>();
list.add("Hotk");
list.add("Eotk");
list.add("Zotk");
list.add("Wotk");
list.add("Ws");
list.add("Es");
list.add("Zs");
list.add("Hs");
ImmutableList<String> immutableList = ImmutableList.copyOf(list.subList(0, 4));
System.out.println(immutableList);
}
}
###结果:
[java.awt.Color[r=0,g=182,b=255], java.awt.Color[r=12,g=241,b=155]]
a-->1
b-->2
c-->3
d-->4
[Hotk, Eotk, Zotk, Wotk]