一,知识体系
二、注意事项及代码
(1)集合的遍历
//1、请编写程序,将自定义对象存储到ArrayList集合,使用泛型并遍历
// a) 使用迭代器遍历
// b) 使用列表迭代器遍历
// c) 使用size()和get()方法遍历
// d) 使用增强for遍历
public class Student<S>{
private S name;
public Student() {
}
public Student(S name) {
this.name = name;
}
public S getName() {
return name;
}
public void setName(S name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"name=" + name +
'}';
}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("小小"));
list.add(new Student("小大"));
list.add(new Student("大小"));
getIterator(list);
System.out.println("---------------------");
getListIterator(list);
System.out.println("---------------------");
getSize(list);
System.out.println("---------------------");
getFor(list);
}
private static void getFor(ArrayList<Student> list) {
for(Student s:list){
System.out.println("name:"+s.getName());
}
}
private static void getSize(ArrayList<Student> list) {
for(int i=0;i<list.size();i++){
Student student = list.get(i);
System.out.println("name:"+student.getName());
}
}
private static void getListIterator(ArrayList<Student> list) {
ListIterator<Student> studentListIterator = list.listIterator();
while (studentListIterator.hasNext()) {
Student next = studentListIterator.next();
System.out.println("name"+next.getName());
}
}
private static void getIterator(ArrayList<Student> list) {
Iterator<Student> iterator = list.iterator();
while(iterator.hasNext()){
Student next = iterator.next();
System.out.println("name:"+next.getName());
}
}
}
此处用ArrayList作为例子,其他的实现类与此相同,注意加强版for语句的使用,且需要注意的是泛型的使用,下面是代码:
class Animal {}
class Dog extends Animal{}
class Cat extends Animal{}
class GenericDemo {
public static void main(String[] args) {
Collection<Object> c = new ArrayList<Object>();
Collection<Animal> c1 = new ArrayList<Animal>();
Collection<Animal> c2 = new ArrayList<Dog>(); //错误,明确的类型,等号左右两边类型一致
Collection<Animal> c3 = new ArrayList<Cat>(); //错误,明确的类型,等号左右两边类型一致
Collection<? extends Animal> c4 = new ArrayList<Object>();//错误,向下限定,右边不能高于左边Animal
Collection<? extends Animal> c5 = new ArrayList<Animal>();
Collection<? extends Animal> c6 = new ArrayList<Dog>();
Collection<? extends Animal> c7 = new ArrayList<Cat>();
Collection<? super Animal> c8 = new ArrayList<Object>();
Collection<? super Animal> c9 = new ArrayList<Animal>();
Collection<? super Animal> c10 = new ArrayList<Dog>();//向上限定,右边类型和左边一致或者比左边高
Collection<? super Animal> c11 = new ArrayList<Cat>();//向上限定,右边类型和左边一致或者比左边高
}
}
(3)可变参数实例
public class demo {
public static void main(String[] args) {
int add = add(1, 2);
System.out.println(add);
int add1 = add(1, 2, 3);
System.out.println(add1);
int add2 = add(1, 2, 3, 4);
System.out.println(add2);
}
public static int add(int... a){
int sum=0;
for(int s:a){
sum+=s;
}
return sum;
}
}
有多个参数时,可变参数是放在最后面,不能放在前面。
三、总结
集合比数组的使用要灵活,但是要注意通过迭代器在集合添加元素是会出现一个异常,要学会解决此异常的方法,即使用列表迭代器。
坚持做一件事或许容易,但是坚持做好一件事却不是那么容易,当拥有一种信念去做好一件事时,就是所说的痛苦并快乐着。