Java容器类类库的用途就是“保存对象”
1>:Collection一个独立元素的序列,这些元素都服从一条或多条规则。
List 必须按照插入的顺序保存元素
Set 不能有重复元素
Queue 按照排队规则来确定对象产生的顺序(一般与被插入元素一致)
2>:Map 一组成对的“键值对”对象,容许你使用键来查找值
ArrayList 允许你使用数字来查找值。
映射表允许我们使用另一个对象来查找某个对象。(关联数组、字典)
List<Apple>apples=newArraylist<Apple>();
List<Apple>apples=newLinkedList<Apple>();
注意,ArrayList 已经被向上转型为 List,目的就是如果你决定去修改你的实现,只需要在创建处修改。
如下用 Integer 对象填充一个 Collection
publicstaticvoidmain(String[]args) {
Collection<Integer>c=newArrayList<Integer>();
for(inti=0;i<10;i++){
c.add(i);//自动装箱
for(Integert:c)
System.out.println(t+" ,");
}
}
3>:添加一组元素
ArrayList.asList() 可以接受一个数组或是用一个逗号分隔的元素列表(使用可变参数),并将其转换为一个 List 对象。
Collection<Integer>collection=newArrayList<Integer>(Arrays.asList(1,2,3,4,5));
Integer[]moreInts={6,7,8,9,10};
collection.addAll(Arrays.asList(moreInts));
Collections.addAll(collection,11,12,13,14,15);
Collections.addAll(collection,moreInts);
List<Integer>list=Arrays.asList(16,17,18,19);
list.set(1,99);
4>:容器打印
importjava.util.*;
publicclassPrintContains{
staticCollectionfill(Collection<String>collection) {
collection.add("rat");
collection.add("cat");
collection.add("dog");
collection.add("dog");
returncollection;
}
staticMapfill(Map<String,String>map) {
map.put("rat","Fuzzy");
map.put("cat","Rags");
map.put("dog","Bosco");
map.put("dog","Spot");
returnmap;
}
publicstaticvoidmain(String[]args) {
System.out.println(fill(newArrayList<String>()));
System.out.println(fill(newLinkedList<String>()));
System.out.println(fill(newHashSet<String>()));
System.out.println(fill(newTreeSet<String>()));
System.out.println(fill(newLinkedHashSet<String>()));
System.out.println(fill(newHashMap<String,String>()));
System.out.println(fill(newTreeMap<String,String>()));
System.out.println(fill(newLinkedHashMap<String,String>()));
}
}
输出为:
[rat, cat, dog, dog][rat, cat, dog, dog][rat, cat, dog][cat, dog, rat][rat, cat, dog]{rat=Fuzzy, cat=Rags, dog=Spot}{cat=Rags, dog=Spot, rat=Fuzzy}{rat=Fuzzy, cat=Rags, dog=Spot}
从输出可以看出,Collection 打印的会用 [ ] 包住,Map 则是会用 { }括起来。
ArrayList,它长于随机访问元素,但是插入和移除元素时较慢
LinkedList,通过较低代价的进行插入删除,提供了优化的顺序访问,在随机访问方面较慢,
getFirst()和element():返回列表的头(第一个元素),并不移除它,peek类似
removeFist()和remove():移除并返回第一个元素,poll类似
addFirst()、add()、addLast() :将元素插入到列表的尾部
removeLast():移除并返回列表的最后一个元素
5>:迭代器
迭代器是一个对象,工作是遍历并选择序列中的对象。
Java中的 Iterator 只能单向移动,只能用来:
一:使用方法 iterator() 要求容器返回一个 Iterator。Iterator 将准备好返回序列的第一个元素
二:使用 next() 获得序列中的下一个元素
三:使用 hashNext() 检查序列中是否还有元素
四:使用remove() 将迭代器中新近返回的元素删除
**ListIterator** : 是一个更加强大的Iterator的子类型,它只能用于各种List类的访问。虽然 Iterotor只能向前移动,但是 ListIterator 可以双向移动。它还可产生相当于迭代器在列表中指向的当前位置的前一个和后一个元素的索引,并且可以使用Set()方法替换它访问过的最后一元素。
6>: Stack
栈:后进先出容器
LinkedList 可以使用栈的所有功能。
publicclassStack<T>{
privateLinkedList<T>stroage=newLinkedList<>();
publicvoidpush(Tv) {
stroage.addFirst(v);
}
publicTpeek() {
returnstroage.getFirst();
}
publicTpop() {
returnstroage.removeFirst();
}
publicbooleanempty() {
returnstroage.isEmpty();
}
publicStringtoString() {
returnstroage.toString();
}
}
这个类是在声明“我们在定义一个可以持有T类型对象的 Stack。Stack 是用 LinkedList 实现的,而LinkedList 也被告知它将持有T 类型对象。”
7>:Set
set 不保存重复的元素
publicstaticvoidmain(Stringargts[]) {
Randomrandom=newRandom(47);
Set<Integer>intset=newHashSet<Integer>();
for(inti=0;i<10000;i++) {
intset.add(random.nextInt(30));
System.out.println(intset);
}
1, 22, 23, 24, 25, 26, 27, 28, 29][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
会发现,每一个数只有哦一个实例在结果中。
8>:Map
publicstaticvoidmain(Stringargts[]) {
Randomrandom=newRandom(47);
Map<Integer,Integer>m=newHashMap<Integer,Integer>();
for(inti=0;i<10000;i++) {
intr=random.nextInt(20);
Integerfreq=m.get(r);
m.put(r,freq==null?1:freq+1);
}
System.out.print(m);
}
输出结果:
{0=481, 1=502, 2=489, 3=508, 4=481, 5=503, 6=519, 7=471, 8=468, 9=549, 10=513, 11=531, 12=521, 13=506, 14=477, 15=497, 16=533, 17=509, 18=478, 19=464}
网友评论