コレクションクラスの学習
4つのメソッドのコレクション
import java.util.ArrayList;
import java.util.Collection;
//Collection类的学习
// Collection<String> test=new ArrayList<String>();对象的创建
/*
Collection中有常用的四种方法
1.add(E e);向集合中添加元素
2.boolean contains(Object o);判断集合中是否有o
3.void clear();清空集合
4.int size();集合的长度
5.boolean isEmpty();判断集合是否为空
6.Boolean remove(Object o);
*/
public class Test {
public static void main(String[] args) {
//创建集合对象
Collection<String> test=new ArrayList<String>();
test.add("A");
test.add("B");
// test.remove("A");
// System.out.println(test.size());
// test.clear();
// System.out.println(test.contains("A"));
// System.out.println(test.isEmpty());
System.out.println(test);
}
}
イテレータ
import java.util.ArrayList;
import java.util.Collection;
/*
Iterator:迭代器,集合的专用遍历方式
Iterator<E> iterator();返回此集合元素的迭代器,通过集合的iterator();方法得到
迭代器事通过集合的iterator()方法得到的,所有我们说它是依赖于集合而存在的
Iterator中的常用方法
E next();返回迭代中的下一个元素
boolean hasNext();如果迭起具有更多元素,则返回true
*/
public class Iterator {
public static void main(String[] args) {
Collection<String> c=new ArrayList<String>();
c.add("A");
c.add("B");
c.add("C");
// Iterator<E> iterator();返回此集合元素的迭代器,通过集合的iterator();方法得到
java.util.Iterator<String> it = c.iterator();//定义一个集合对象的迭代器
System.out.println(it.next());
//通过迭代器循环输出
while(it.hasNext()){//判断是否有元素
System.out.println(it.next());//输出当前指向的元素
}
}
}
例
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
//实例:Collection集合储存学生类对象并遍历
public class Application {
public static void main(String[] args) {
//创建学生类集合
Collection<Student> c=new ArrayList<Student>();
Student s1=new Student(18,"呆瓜1");
Student s2=new Student(19,"呆瓜2");
Student s3=new Student(20,"呆瓜3");
//将学生类存储到集合中去
c.add(s1);
c.add(s2);
c.add(s3);
//创建迭代器
Iterator<Student> it = c.iterator();
while (it.hasNext()){
Student student=it.next();
System.out.println(student.getName()+" "+student.getAge());
}
}
}
/*
public class Student {
private int age;
private String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
*/
Listクラス
Listクラスの特徴
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class test {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
Iterator<String> it = list.iterator();
while (it.hasNext()){
String s=it.next();
System.out.println(s);
}
}
}
クラス固有のメソッド一覧
import java.util.ArrayList;
import java.util.List;
//list集合特有方法
/*
void add(int index,E element) 再次集合的指定位置插入指定的元素,插入位的元素及其以后的元素向后移一位
E remove(int index) 删除指定索引出的元素,返回被删除的元素
E set(int index.E element) 修改指定索引出的元素,返回被修改的元素
E get(int index) 返回指定索引出的元素
*/
public class ListMethod {
public static void main(String[] args) {
//创建list集合
List<String> c=new ArrayList<String>();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
// c.add(1,"4");
// c.add(3,"5");
// System.out.println(c.get(3));
// System.out.println(c.set(2, "JAVA"));
// c.remove(2);
//输出集合
System.out.println(c);
//遍历list
for (int i=0;i<c.size();i++){
String s=c.get(i);
System.out.println(s);
}
}
}
例
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//实例list集合存储学生对象并遍历
public class Application {
public static void main(String[] args) {
//创建学生类list集合
List<Student> c=new ArrayList<Student>();
//创建学术类对象
Student s1=new Student("one",18);
Student s2=new Student("two",19);
Student s3=new Student("three",20);
//增加list元素
c.add(s1);
c.add(s2);
c.add(s3);
//遍历list对象
for (int i=0;i<c.size();i++){
System.out.println(c.get(i).getName()+" "+c.get(i).getAge());
}
//迭代器遍历
Iterator<Student> it = c.iterator();
while (it.hasNext()){
Student s=it.next();
System.out.println(s.getName()+" "+s.getAge());
// System.out.println(it.next().getName()+" "+it.next().getAge()); 不能用此种方法遍历,因为每次执行一次next,对象就发生了改变
}
}
}
/*
//自定义学生类
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
*/
同時修正および例外処理方法
import java.util.ArrayList;
import java.util.Iterator;
//并发修改异常
/*
1.异常解释
ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
产生的原因:
迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
简单描述就是:迭代器遍历元素的时候,通过集合是不能修改元素的。
如何解决呢?
A:迭代器迭代元素,迭代器修改元素
B:集合遍历元素,集合修改元素(普通for)
*/
public class Demo01 {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
// 创建并添加元素
array.add("hello");
array.add("world");
array.add("java");
Iterator it = array.iterator();
while (it.hasNext()) {
//此处发生并发修改异常,因为next方法会判断实际修改次数和预期修改次数是否相等,而add方法增加了实际修改次数。
String s = (String) it.next();
if ("world".equals(s)) {
array.add("javaee");
}
}
}
}
/*
// 方式1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator
// ListIterator lit = array.listIterator();
// while (lit.hasNext()) {
// String s = (String) lit.next();
// if ("world".equals(s)) {
// lit.add("javaee");
// }
// }
// System.out.println("list1:" + array);
// 方式2:集合遍历元素,集合修改元素(普通for)
for (int x = 0; x < array.size(); x++) {
String s = (String) array.get(x);
if ("world".equals(s)) {
array.add("javaee");
}
}
*/