Collections类
Collection是最基本的集合接口。
一个Collection代表一组Object对象,即Collection的元素(Element)。
Collection是接口,不能直接new
Collection还有很多接口,子接口有很多实现类,我们只能new 子接口的实现类
实例:
public void v1(){
/**
*父类申明,子类实现
*/
Collection cn = new ArrayList();
cn.add(1);
cn.add(12.2d);
cn.add(123.3f);
cn.add('a');
cn.add("nimei");
cn.add(true);
Date d = new Date();
cn.add(d);
Iterator it = cn.iterator();
while(it.hasNext()){
Object oo = it.next();
System.out.println(oo);
}
} 集合和数组区别:
数组中存放的是同一类数据,而集合中可以存放多种类的数据
Iterator:
hasNext():判断集合中的元素是否遍历完毕,如果没有,就返回true
next() :返回下一个元素
remove();从集合中删除上一个next()方法返回的元素
例子:
Iterator it = collection.iterator();
while(it.hasNext()){
Object obj = it.next();
}------------------------------------------------
常用的集合类:List,Set,Map
}
}
List:
list是有序的Collection,使用此接口能够精确的控制每个元素插入的位置,用户能够使用索引(元素在list中的位置,类似于数组中的下标)来访问list中的元素,这类似于java数组
List允许有相同的元素,Set不允许
实现list接口的常用的类有ArrayList,LinkedList,Vector。
-----------------------------------
ArrayList代表可变的数组,允许对元素进行快速的随机访问,但是向ArrayList中插入与删除元素的速度较慢。
实例:
public void v2(){
ArrayList ll = new ArrayList();
ll.add("fuckyou1");
ll.add("fuckyou2");
ll.add("fuckyou3");
ll.add("fuckyou4");
ll.add("fuckyou5");
ll.add("fuckyou6");
ll.add("fuckyou17");
ll.add("fuckyou8");
//System.out.println(ll);
Iterator it = ll.iterator();
while(it.hasNext()){
Object oo = it.next();
System.out.println(oo);
}
Object aa = ll.get(1);
System.out.println("aa"+aa);
} ---------------------------------------------------------
Vector是同步的,而ArrayList是异步的,所以Vector的性能要差
-----------------------------------------------------------
linkedList:实例;
public void v3(){
LinkedList ll = new LinkedList();
for (int i = 0; i < 5; i++) {
ll.add(i);
}
//ll.add(6,"fuckyou");
//ll.add(1,"666");
//ll.set(0, 22);
//ll.remove();
Collections.shuffle(ll);
System.out.println(ll);
Collections.reverse(ll);
System.out.println(ll);
Collections.sort(ll);
System.out.println(ll);
} ------------------------------------------------------
Set:
Set是简单的一种集合,集合中的对象不按照特定的方式排序,并没有重复的对象,Set接口主要有两个实现类
HashSet,TreeSet
HashSet类具有很好的存取和查找功能。
Set无序的,不会按照add的顺序打印出来,并且不重复。
代码演示:
HashSet:
public void v4(){
HashSet hs = new HashSet();
hs.add("a1");
hs.add("a2");
hs.add("a3");
hs.add("a4");
hs.add("a\5");
hs.add("a6");
hs.add("a17");
hs.add("a8");
hs.add("a9");
//System.out.println(hs);
//hs.clear();
System.out.println(hs);
System.out.println(hs.isEmpty());
Class<? extends HashSet> class1 = hs.getClass();
for (Object object : hs) {
System.out.println("object"+object);
}
-----------
TreeSet是一个有序的集合,TreeSet中的元素按照升序排列,缺省是按照自然排序经行排列
自然排序的情况下,一个TreeSet只允许存放同一个类型的多个元素,这里要求不是自定义的类。
有序:存放同一类的元素。
TreeSet:
public void v5(){
TreeSet ts = new TreeSet();
ts.add(1);
ts.add(2);
ts.add(3);
ts.add(4);
ts.add(5);
ts.add(6);
System.out.println(ts);
}
-----、
对于自定义的类,如果不做适当的处理,TreeSet中只能存储一个该类型对象的实例
如下:
package day07;
import java.util.Iterator;
import java.util.TreeSet;
/***
* TreeSet演示自定义的类
* 对于自定义的类,如果不做适当的处理,TreeSet只能存储一个该类型的对象的实例
* @author yw.wang
*
*/
public class Test03 {
public static void main(String[] args) {
TreeSet<Demo> tSet = new TreeSet<Demo>();
Demo d1 = new Demo(1,"abc");
Demo d2 = new Demo(2,"xyz");
tSet.add(d1);
// tSet.add(d2); //如果有这条语句,运行程序时候会抛出ClassCastException异常
//如果没有这条语句,程序会正常运行,并输出d1的内容
Iterator<Demo> iterator = tSet.iterator();
while(iterator.hasNext()){
Demo d = iterator.next();
System.out.println("a= "+d.a+ " "+ "b = "+d.b);
System.out.println();
}
}
}
class Demo{
int a ;
String b;
public Demo(int a ,String b){
this.a = a;
this.b=b;
}
}
-----------------------------------------------------------
Map类:
Map(映射)是一种能把键对象和值对象经行映射的集合,它的每一个元素都包含一对键对象和值对象。
向Map集合中加入元素时,必须提供一对键对象和值对象,从Map集合中检索元素时候,只要给出键对象,就会返回对应的值对象
接口Map提供了根据关键字找对应值方法get()
还提供了对应值存放方法put(Object key,Obkect value)
演示Map类:
public void v6(){
HashMap mm = new HashMap();
mm.put(1, "aaa"); //存放
mm.put(2, "bbb");
mm.put("hhaha", "heheh");
mm.put("haha", "aaa");
mm.put("hehe", "hehe");
mm.put("nimei", "hihi");
System.out.println(mm.get("nimei")); //获取
}
}
-----------------------------------------------------------------------
泛型:
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数、
public static void main(String[] args) {
List li = new ArrayList();
li.add(new ArrayList(3));
Integer i = (Integer)li.get(0);
//下面使用泛型实现
List<Integer> li1 = new ArrayList<Integer>();
li.add(new Integer(3));
Integer i1 = li1.get(0);
泛型的通配符:
K 键
V 值
T 类型
E 枚举
? 任何类型
------
泛型示例:
public void v7(){
ArrayList<Integer> ll = new ArrayList<Integer>();
ll.add(1);
ll.add(2);
ll.add(3);
ll.add(4);
ll.add(5);
ll.add(6);
System.out.println(ll);
HashMap<Integer,String> mm = new HashMap<Integer,String>();
mm.put(1, "abc");
mm.put(2, "a");
mm.put(3, "b");
mm.put(4, "c");
System.out.println(mm);
System.out.println(mm.get(1));
} --------------------------------
补充:
增强for()
特点;
增强for循环对于遍历array或Collection的时候相当方便
增强for循环对于遍历array或Collection的时候相当方便
除了简单遍历并读出其中的内容外,不建议使用增强for循环
缺陷:
数组:不能方便的访问下标的值
集合: 与Iterator相比,不能方便的删除集合中的内容
-----------
代码示例:
package day07;
import java.util.Date;
/*****
* 增强for的演示
* @author yw.wang
*
*/
public class Test05 {
public static void main(String[] args) {
int [] num ={1,2,3,4,5};
//原本的for循环
// for (int i = 0; i < num.length; i++) {
// System.out.println(num [i]);
// }
//增强for
for (int i : num) {
System.out.println(i);
}
Date [] dd = new Date[7];
dd[0] = new Date();
dd[1] = new Date();
dd[2] = new Date();
dd[3] = new Date();
dd[4] = new Date();
dd[5] = new Date();
dd[6] = new Date();
for (Date date : dd) {
System.out.println(date);
}
Test05 [] tt = new Test05[3];
tt[0] = new Test05();
tt[1] = new Test05();
tt[2] = new Test05();
for (Test05 test05 : tt) {
System.out.println(test05);
}
}
}