集合框架是Java中的一个很重要的基本知识。鉴于自己对这个集合框架也不是掌握的很好的情况下,本人进行了一次集合框架的系统性的学习。
以下是本人学习过程的一些总结和见解。希望可以对一些朋友提供参考的帮助。
首先,先上一个集合框架的类图吧。
集合框架的作用:
相信一些初学者看到了上面的继承图之后吓一大跳。这是些什么呀,好多继承关系。但是,不用担心,实际上常用的也只不过是第二张图中的这些集合而已。所以,现在我们开始学习吧。
从他们的基类Collection开始。
Collection本身是一个接口来的。这个也可以理解,它的出现就是为了给我们经常使用的List,Set继承。
但是注意的是,List和Set也是接口。这就是我们List list=new ArrayList(); 这里这样写的了,面向接口编程了嘛。List是接口,那么list就可以随便写ArrayList或者LinkedList对象 了。如果不清楚这点的可以上百度或者google查下。
正是因为List是接口,那么,ArrayList,Vector,LinkedList就是具体实现的类。而且这几个类就是我们常用的。(当然还有其他的)
实现了Set接口的TreeSet和HashSet也是一样的道理,上面的一张图已经可以很清晰的看出他们的关系和作用。
当然还有Map,但是Map并不是继承Collection的,你可以理解Map和Collection是同级别的接口吧。实现了Map接口的常用类有TreeMap和HashMap
· Collection 接口是一组允许重复的对象。
· Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。
· List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。
· Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。
Collection接口提供给我以下常用的方法:
基本操作 增加元素
boolean | add(E e) 确保此 collection 包含指定的元素(可选操作)。 |
boolean | addAll(Collection<? extendsE> c) 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 |
boolean | remove(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 |
boolean | removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 |
boolean | contains(Object o) 如果此 collection 包含指定的元素,则返回 true。 |
boolean | containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 |
判定是否为空
boolean | isEmpty() 如果此 collection 不包含元素,则返回 true。 |
最常用的就是
|
这里就涉及到了迭代器。什么是迭代器呢??
Iterator 接口学习
访问/遍历集合元素的好办法是使用Iterator接口(迭代器用于取代Enumeration)
Public Boolean hasNext(} ;
Public Object next(};
Public void remove(};
}
迭代器是一个很好的用来遍历的好方法.
Iterator接口实际上也就是三个方法,很容易掌握。
hasNext() 判断集合是否还有可访问的元素
Next() 方法 返回集合集合的下一个元素,如果没有下一个则引发NoSuchElementException
remove() 从迭代器中删除一个元素
好吧。现在我们就开始学习他们的实现类,List的实现类有:ArrayList,Vactor,LinkedList
之前我们知道了List接口的性质了,现在回顾下。
List接口的特征
现在开始学习ArrayList实现类
ArrayList实现类的学习
List:线性排列,有序,顺序与添加时相同,允许重复和为null
ArrayList的案例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListDemo {
public static void main(String[] args) {
List list=new ArrayList();
list.add("ni");
list.add("hao");
list.add("ma");
list.add("?");
list.add("xixi");
list.add("haha");
System.out.println(list);//从结果看就知道List是以数组来存放
//删除
list.remove(4);
list.remove("haha");
System.out.println(list);
//增加for循环输出
for(Object o:list){
String name=(String)o;
System.out.println (name);
//这里顺带学下排序
//集合框架的排序需要使用到Collections类
Collections.sort(list);
System.out.println("排序后的结果");
System.out.println(list);
//逆序
Collections.reverse(list);
System.out.println("排序后的结果");
System.out.println(list);
//随机混合
Collections.shuffle(list);
System.out.println("排序后的结果");
System.out.println(list);
}
}
}
从这里应该掌握的是:Collections类的使用(集合排序的时候经常使用)
(插曲)Collections学习
经常使用的方法是
sort ()
shuffle()
reverse()
copy()
Collections里面提供的都是静态方法,所以我们不需要new实例就可以直接打点调用了.
来一个洗牌的案例:
public class CardsDemo {
public static void main (String[] args) {
//四种花色
String[] colors={"黑桃","红桃","梅花","方块"};
//数字牌
String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//制作一副新牌
ArrayList cards=new ArrayList();
for (int i = 0; i<colors.length; i++){
for (int j = 0; j<nums.length; j++) {
cards.add(colors[i]+nums[j]);
}
}
//打印
for (int i = 0; i<cards.size(); i++) {
System.out.print (cards.get(i)+" ");
if((i+1)%13==0){
System.out.println ();//换行
}
}
System.out.println ("===================================");
//洗牌
Collections.shuffle(cards);
for (int i = 0; i<cards.size(); i++) {
System.out.print (cards.get(i)+" ");
if((i+1)%13==0){
System.out.println ();//换行
}
}
}
}
执行结果:
黑桃A
黑桃2
黑桃3
黑桃4
黑桃5
黑桃6
黑桃7
黑桃8
黑桃9
黑桃10
黑桃J
黑桃Q
黑桃K
==========================
红桃A
红桃2
红桃3
红桃4
红桃5
红桃6
红桃7
红桃8
红桃9
红桃10
红桃J
红桃Q
红桃K
==========================
梅花A
梅花2
梅花3
梅花4
梅花5
梅花6
梅花7
梅花8
梅花9
梅花10
梅花J
梅花Q
梅花K
==========================
方块A
方块2
方块3
方块4
方块5
方块6
方块7
方块8
方块9
方块10
方块J
方块Q
方块K
==========================
方块4
梅花5
红桃9
梅花J
梅花A
黑桃4
梅花8
黑桃10
梅花4
梅花3
方块K
梅花9
方块2
==========================
红桃2
红桃A
黑桃8
梅花10
黑桃J
方块6
方块J
方块8
黑桃K
方块Q
红桃J
红桃7
黑桃5
==========================
方块5
方块9
红桃Q
梅花2
黑桃Q
梅花K
黑桃3
黑桃6
红桃K
梅花Q
方块10
黑桃A
方块3
==========================
黑桃9
方块A
红桃4
红桃5
红桃8
红桃3
梅花7
梅花6
黑桃7
红桃6
方块7
黑桃2
红桃10
==========================
那么,我们就大概之后的了shuffle()的方法有啥作用了.
这里面重要的不是集合里面的那几个方法的使用,而是要知道实现类有什么样的区别。
在正常的开发中,我们使用最多的应该就是这个ArrayList了。ArrayList挺简单的,重要的是我们应该知道这些集合实现类的不同之后,在适当的时候我们就会想到应该用什么来实现了。那么,下一节接着来学习Vector,LinkedList,Queue