Collection

来源:互联网 发布:移动和网络怎么没信号 编辑:程序博客网 时间:2024/05/19 01:59

Collection 在jdk1.5以后,有了一个父接口Iterable,这个接口的出现将iterator 方法进行抽取,提高了扩展性。
增强for循环:foreach语句,foreach简化了迭代器。
格式 ://增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器。
for (元素类型 变量名: Collection集合 & 数组){
……
}
高级for循环和传统for循环的区别:
高级for循环在使用时,必须要明确被遍历的目标。这个目标,可以是Collection集合或者是数组,如果遍历Collection集合,在遍历过程中还需要对元素进行操作,比如删除,需要使用迭代器。如果遍历数组还需要对数组元素进行操作,建议使用传统的for循环,因为可以定义角标通过角标操作元素。如果只为遍历获取,可以简化成高级for循环呢,他的出现为了简化书写。

高级for循环可以遍历map集合吗?
不可以,但是可以将map转成set后在使用foreach语句。
1.作用:对存储对象的容器进行迭代: 数组 collection map
2.增强for循环迭代数组:
String[] arr ={“a”,”b”,”c”}; //数组的静态定义方式,只适用于数组的首次定义的时候
for (String s: arr) {
System.out.println(s);
}
3.单列集合 Collection
List list =new ArrayList();
List.add(“aaa”);
//增强for循环,没有使用泛型的集合能不能使用增强for循环迭代? 能
for (Object obj :list){
String s=(String) obj;
System.out.println(s);
}
4.双列集合 map
Map map=new HashMap();
Map.put(“a’, “aaa”);
//传统的方式必须是要掌握的
Set entrys=map.entrySet(); // 获得所有的键值对Entry对象
iter =entrys.iterator(); //迭代出所有的entry
while(iter.hasNext()){
Map.Entry entry =(Entry) iter.next();
String key=(String) entry.getKey(); //分别获得Key和value
String value=(String) entry.getValue();
System.out.println(key+ “=”+value);
}
//增强for循环的迭代:原则上map集合是无法使用增强for循环来迭代的,因为增强for循环只能针对实现了Iterable接口的类,才能保证有iterator方法,Java有这样的限定是因为增强for循环内部还是用
for(Object obj: map.entrySet()){
Map.Entry entry=(Entry) obj; //obj依次表示Entry
System.out.println(entry.getKey()+”=”=entry.getValue());
}
5.集合迭代器注意的问题:
在迭代集合的过程中,不能对集合进行增删操作(会报并发访问异常);可以用迭代器的方法进行操作(子类listIterator:有增删的方法)
6.增强for循环注意的问题:在使用增强for循环时,不能对元素进行赋值。
int[ ] arr={1,2,3};
for(int num :arr){
Num=0; //不能改变数组的值
}
System.out.println(arr[1]); //2
可变参数(…):用到函数的参数上,当要操作的同一个类型元素个数不确定的时候,可是用这个方式,这个参数可以接受任意个数的同一类型的数据。

和以前接收数组不一样的是: 以前定义驻足类型,需要先创建一个数组对象,再将这个数组对象作为参数传递给函数。现在,直接将数组中的元素作为参数传递即可。底层其实是将这些元素进行数组的封装,而这个封装动作,是在底层完成的,被隐藏了。所以简化了用户的书写,少了调用者定义的方法。
如果参数列表中使用了可变参数,可变参数必须定义在参数列表结尾(也就是必须是最后一个参数,否则编译会失败。)
如果要获取多个int数的和呢?可以使用将多个int数封装到数组中,直接对数组求和即可。
静态导入:导入了类中的所有静态成员,简化静态成员的书写。
import static java.util.Collections.*; //导入Collection类中的所有静态成员。

枚举: 关键字 enum
问题:对象的某个属性的值不能是随意的,必须为固定的一组取值中的某一个。
解决方法:
1.在setGrade方法中做判断,不符合格式要求的就抛出异常。
2.直接限定用户的选择,通过自定义类模拟枚举的方法来限定用户的输入,写一个Gread类,私有构造函数,对外提供5个静态的常量表示类的实例。
3.Jdk5中新定义了枚举类型,专门用于解决此类问题。
4.枚举就是一个特殊的java类u,可以定义属性、方法、构造函数、实现接口、继承类。
自动拆装箱:java中数据类型分为两种:基本数据类型 引用数据类型(对象)
在java程序中所有数据都需要当作对象来处理,针对8中基本数据类型提供了包装类,如下:
int –> Integer
Byte –> Byte
Short–>Short
long–>Long
Char –>Character
double–>Double
float–>Float
Boolean–>Boolean
Jdk5以前基本数据类型和包装类之间需要相互转换
基本—引用 Integer x =new Integer(x);
引用—基本 int num=x.intValue();
1.Integer X=1;x=x+1; 经历了什么过程?
装箱——> 拆箱——>装箱
2.为了优化,虚拟机为包装类提供了缓冲池,Integer 池的大小 -128~ 127一个字节的大小
3.String池:Java为了优化字符串操作,提供了一个缓冲池。