java三种集合框架
一、
1、java.util.List:线性,有下标,长度可变,有序的(先进先出),可重复
2、java.util.Set:非线性,无下标,不可重复,无序,长度可变
3、java.util.Map:K是在set中的,所以K不重复,每一个K对应一个V,V是可重复的
二、
三种遍历方法:
1、有下标的可用三种遍历方式,最后一种加强for循环的效率最高,可用系统测试时间的方法来测试
2、没下标的只能用后两种
三、
要明确的一点,我们定义一个方法时要知道它是干什么的,参数是什么,返回值是什么
四、
要实现一个集合只需要:创建集合对象,将元素装入集合,遍历
/**
* 队列测试
* 大小可变数组的实现:线性,有下标,长度可变,有序的(先进先出),可重复
* @author Administrator
*
*/
public class ArrayList {
public static void main(String[] args){
//创建队列对象
java.util.ArrayList<String> list=new java.util.ArrayList<String>();
//获取系统时间
long t1=System.currentTimeMillis();
//装入元素
for(int i=0;i<100000;i++){
String str="元素"+i;
//将元素装入队列,于是队列就有了长度
list.add(str);
}
list.add("元素0");
//遍历1:用for循环
for(int i=0;i<list.size();i++){
//取出元素一次,就输出一次
String str=list.get(i);
System.out.println(str);
}
//遍历完了之后再统计时间
long t2=System.currentTimeMillis();
System.out.println((t2-t1));
//遍历2:通过迭代循环,就相当于用一个中间容器来传送
//调用这个方法,返回一个类型
// java.util.Iterator<String> iter=list.iterator();
// //判断迭代器中是否有元素,用while循环循环次数就可以输出所有的元素,用if只可以得到一个元素
// while(iter.hasNext()){
// //如果有,就取出一个
// String str=iter.next();
// System.out.println(str);
// }
// //遍历3:加强for循环,遍历后面的容器放到前面的容器中.最快,但是时间每次都会变化
// for(String str:list){
// System.out.println(str);
// }
}
}
2、
/**
* 无序列表(集合测试)
* HashSet:非线性,无下标,不可重复,无序,长度可变
* @author Administrator
*
*/
public class HashSetTest {
public static void main(String[] args){
//创建集合对象
java.util.HashSet<String> set=new java.util.HashSet<String>();
//装入元素
for(int i=0;i<100;i++){
String str="元素"+i;
//将元素装入集合中
set.add(str);
}
//为了判断元素0是替换掉原来的还是根本没加进去,结果证明是没加进去,boolean的值只有真假两个
boolean b=set.add("元素0");
System.out.println(b);
//遍历,不能再通过下标遍历了
//遍历1:
// java.util.Iterator< String> iter=set.iterator();
// while(iter.hasNext()){
// String str=iter.next();
// System.out.println(str);//打印出来的结果是无序的
// }
//遍历2:for循环加强
for(String str:set){
System.out.println(str);
}
}
}
3、
/**
* 映射测试
* HashMap:
* K<-->V
* K是在set中的,所以K不重复
* 每一个K对应一个V,V是可重复的,所以就相当于数学中的一个原像可以有多个像,即
* @author Administrator
*
*/
public class HashMap {
public static void main(String[] args){
//创建映射对象
java.util.HashMap<Integer, String> map=new java.util.HashMap<Integer, String>();
//装入映射关系
for(int i=0;i<10;i++){
int num=201108071+i;
String name="学生";
//装入映射,不能用add
map.put(num, name);
}
//添加映射
map.put(2011080712,"张志君");
//遍历不能用这个了:java.util.Iterator<E>,也不能用这个java.util.HashSet<E>,只能用
//得到装有K的Set
java.util.Set<Integer> keys=map.keySet();
for(int num:keys){
//根据K得到对应的V
String name=map.get(num);
System.out.println(num+" "+name);
}
}
}
一、
1、java.util.List:线性,有下标,长度可变,有序的(先进先出),可重复
2、java.util.Set:非线性,无下标,不可重复,无序,长度可变
3、java.util.Map:K是在set中的,所以K不重复,每一个K对应一个V,V是可重复的
二、
三种遍历方法:
1、有下标的可用三种遍历方式,最后一种加强for循环的效率最高,可用系统测试时间的方法来测试
2、没下标的只能用后两种
三、
要明确的一点,我们定义一个方法时要知道它是干什么的,参数是什么,返回值是什么
四、
要实现一个集合只需要:创建集合对象,将元素装入集合,遍历
/**
* 队列测试
* 大小可变数组的实现:线性,有下标,长度可变,有序的(先进先出),可重复
* @author Administrator
*
*/
public class ArrayList {
public static void main(String[] args){
//创建队列对象
java.util.ArrayList<String> list=new java.util.ArrayList<String>();
//获取系统时间
long t1=System.currentTimeMillis();
//装入元素
for(int i=0;i<100000;i++){
String str="元素"+i;
//将元素装入队列,于是队列就有了长度
list.add(str);
}
list.add("元素0");
//遍历1:用for循环
for(int i=0;i<list.size();i++){
//取出元素一次,就输出一次
String str=list.get(i);
System.out.println(str);
}
//遍历完了之后再统计时间
long t2=System.currentTimeMillis();
System.out.println((t2-t1));
//遍历2:通过迭代循环,就相当于用一个中间容器来传送
//调用这个方法,返回一个类型
// java.util.Iterator<String> iter=list.iterator();
// //判断迭代器中是否有元素,用while循环循环次数就可以输出所有的元素,用if只可以得到一个元素
// while(iter.hasNext()){
// //如果有,就取出一个
// String str=iter.next();
// System.out.println(str);
// }
// //遍历3:加强for循环,遍历后面的容器放到前面的容器中.最快,但是时间每次都会变化
// for(String str:list){
// System.out.println(str);
// }
}
}
2、
/**
* 无序列表(集合测试)
* HashSet:非线性,无下标,不可重复,无序,长度可变
* @author Administrator
*
*/
public class HashSetTest {
public static void main(String[] args){
//创建集合对象
java.util.HashSet<String> set=new java.util.HashSet<String>();
//装入元素
for(int i=0;i<100;i++){
String str="元素"+i;
//将元素装入集合中
set.add(str);
}
//为了判断元素0是替换掉原来的还是根本没加进去,结果证明是没加进去,boolean的值只有真假两个
boolean b=set.add("元素0");
System.out.println(b);
//遍历,不能再通过下标遍历了
//遍历1:
// java.util.Iterator< String> iter=set.iterator();
// while(iter.hasNext()){
// String str=iter.next();
// System.out.println(str);//打印出来的结果是无序的
// }
//遍历2:for循环加强
for(String str:set){
System.out.println(str);
}
}
}
3、
/**
* 映射测试
* HashMap:
* K<-->V
* K是在set中的,所以K不重复
* 每一个K对应一个V,V是可重复的,所以就相当于数学中的一个原像可以有多个像,即
* @author Administrator
*
*/
public class HashMap {
public static void main(String[] args){
//创建映射对象
java.util.HashMap<Integer, String> map=new java.util.HashMap<Integer, String>();
//装入映射关系
for(int i=0;i<10;i++){
int num=201108071+i;
String name="学生";
//装入映射,不能用add
map.put(num, name);
}
//添加映射
map.put(2011080712,"张志君");
//遍历不能用这个了:java.util.Iterator<E>,也不能用这个java.util.HashSet<E>,只能用
//得到装有K的Set
java.util.Set<Integer> keys=map.keySet();
for(int num:keys){
//根据K得到对应的V
String name=map.get(num);
System.out.println(num+" "+name);
}
}
}