java对象数组的概述和使用

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Student
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#008000">//<span style="color:#008000"> 成员变量
<span style="color:#008080"> 4     <span style="color:#0000ff">private<span style="color:#000000"> String name;
<span style="color:#008080"> 5     <span style="color:#0000ff">private <span style="color:#0000ff">int<span style="color:#000000"> age;
<span style="color:#008080"> 6 
<span style="color:#008080"> 7     <span style="color:#008000">//<span style="color:#008000"> 构造方法
<span style="color:#008080"> 8     <span style="color:#0000ff">public<span style="color:#000000"> Student()
<span style="color:#008080"> 9 <span style="color:#000000">    {
<span style="color:#008080">10         <span style="color:#0000ff">super<span style="color:#000000">();
<span style="color:#008080">11 <span style="color:#000000">    }
<span style="color:#008080">12 
<span style="color:#008080">13     <span style="color:#0000ff">public Student(String name, <span style="color:#0000ff">int<span style="color:#000000"> age) 
<span style="color:#008080">14 <span style="color:#000000">    {
<span style="color:#008080">15         <span style="color:#0000ff">super<span style="color:#000000">();
<span style="color:#008080">16         <span style="color:#0000ff">this.name =<span style="color:#000000"> name;
<span style="color:#008080">17         <span style="color:#0000ff">this.age =<span style="color:#000000"> age;
<span style="color:#008080">18 <span style="color:#000000">    }
<span style="color:#008080">19 
<span style="color:#008080">20     <span style="color:#008000">//<span style="color:#008000"> 成员方法
<span style="color:#008080">21     <span style="color:#008000">//<span style="color:#008000"> getXxx()/setXxx()
<span style="color:#008080">22     <span style="color:#0000ff">public<span style="color:#000000"> String getName() 
<span style="color:#008080">23 <span style="color:#000000">    {
<span style="color:#008080">24         <span style="color:#0000ff">return<span style="color:#000000"> name;
<span style="color:#008080">25 <span style="color:#000000">    }
<span style="color:#008080">26 
<span style="color:#008080">27     <span style="color:#0000ff">public <span style="color:#0000ff">void<span style="color:#000000"> setName(String name) 
<span style="color:#008080">28 <span style="color:#000000">    {
<span style="color:#008080">29         <span style="color:#0000ff">this.name =<span style="color:#000000"> name;
<span style="color:#008080">30 <span style="color:#000000">    }
<span style="color:#008080">31 
<span style="color:#008080">32     <span style="color:#0000ff">public <span style="color:#0000ff">int<span style="color:#000000"> getAge() 
<span style="color:#008080">33 <span style="color:#000000">    {
<span style="color:#008080">34         <span style="color:#0000ff">return<span style="color:#000000"> age;
<span style="color:#008080">35 <span style="color:#000000">    }
36 
37     public void setAge(int age) 
38     {
39         this.age = age;
40     }
41 
42     @Override
43     public String toString() 
44     {
45         return "Student [name=" + name + ", age=" + age + "]";
46     }
47 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
<span style="color:#008080"> 1 <span style="color:#008000">/**
<span style="color:#008080"> 2 <span style="color:#008000">把5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。
<span style="color:#008080"> 3 <span style="color:#008000">*         学生:Student
<span style="color:#008080"> 4 <span style="color:#008000">*         成员变量:name,age
<span style="color:#008080"> 5 <span style="color:#008000">*         构造方法:无参,带参
<span style="color:#008080"> 6 <span style="color:#008000">*         成员方法:getXxx()/setXxx()
<span style="color:#008080"> 7 <span style="color:#008000">* 分析:
<span style="color:#008080"> 8 <span style="color:#008000">*         A:创建学生类。
<span style="color:#008080"> 9 <span style="color:#008000">*         B:创建学生数组(对象数组)。
<span style="color:#008080">10 <span style="color:#008000">*         C:创建5个学生对象,并赋值。
<span style="color:#008080">11 <span style="color:#008000">*         D:把C步骤的元素,放到数组中。
<span style="color:#008080">12 <span style="color:#008000">*         E:遍历学生数组。
<span style="color:#008080">13 <span style="color:#008000">*  <span style="color:#008000">*/
<span style="color:#008080">14 
<span style="color:#008080">15 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080">16 <span style="color:#000000">{
<span style="color:#008080">17     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080">18 <span style="color:#000000">    {
<span style="color:#008080">19         <span style="color:#008000">//<span style="color:#008000"> 创建学生数组(对象数组)。
<span style="color:#008080">20         Student[] students = <span style="color:#0000ff">new Student[5<span style="color:#000000">];
<span style="color:#008080">21         <span style="color:#008000">//<span style="color:#008000"> for (int x = 0; x < students.length; x++) 
<span style="color:#008080">22         <span style="color:#008000">//<span style="color:#008000"> {
<span style="color:#008080">23         <span style="color:#008000">//<span style="color:#008000">         System.out.println(students[x]);
<span style="color:#008080">24         <span style="color:#008000">//<span style="color:#008000"> }
<span style="color:#008080">25         <span style="color:#008000">//<span style="color:#008000">     System.out.println("---------------------");
<span style="color:#008080">26 
<span style="color:#008080">27         <span style="color:#008000">//<span style="color:#008000"> 创建5个学生对象,并赋值。
<span style="color:#008080">28         Student s1 = <span style="color:#0000ff">new Student("小明", 27<span style="color:#000000">);
<span style="color:#008080">29         Student s2 = new Student("小红", 30);
30         Student s3 = new Student("小强", 30);
31         Student s4 = new Student("旺财", 12);
32         Student s5 = new Student("张三", 35);
33 
34         // 将对象放到数组中。
35         students[0] = s1;
36         students[1] = s2;
37         students[2] = s3;
38         students[3] = s4;
39         students[4] = s5;
40 
41         // 遍历
42         for (int x = 0; x < students.length; x++) 
43         {
44             //System.out.println(students[x]);
45             Student s = students[x];
46             System.out.println(s.getName()+"---"+s.getAge());
47         }
48     }
49 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.02 对象数组的内存图解

15.03 集合的由来及与数组的区别

集合类的由来:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。

数组和集合类同的区别:

数组可以存储同一种类型的基本数据也可以存储同一种类型的对象,但长度是固定的

集合只可以存储不同类型的对象,长度是可变的

集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

15.04 集合的继承体系图解

集合容器因为内部的数据结构不同,有多种具体容器,根据共性内容不断的向上抽取,就形成了集合框架。

框架的顶层Collection接口

15.05 Collection集合的功能概述

Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

15.06 Collection集合的基本功能测试

成员方法:

1.  boolean add(Ee):确保此 collection 包含指定的元素(可选操作)。

2.  boolean remove(Objecto):从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。

3.  void clear():移除此 collection 中的所有元素(可选操作)。

4.  boolean contains(Objecto):如果此 collection 包含指定的元素,则返回 true。

5.  boolean isEmpty():如果此 collection 不包含元素,则返回 true。

6.  int size():返回此 collection 中的元素数。

例:

<span style="color:#008080"> 1 <span style="color:#008000">//<span style="color:#008000"> 创建集合对象
<span style="color:#008080"> 2 <span style="color:#008000">//<span style="color:#008000"> Collection c = new Collection(); <span style="color:#008000">//<span style="color:#008000">错误,因为接口不能实例化
<span style="color:#008080"> 3 Collection c = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 4 c.add("hello"<span style="color:#000000">);
<span style="color:#008080"> 5 c.add("world"<span style="color:#000000">);
<span style="color:#008080"> 6 c.add("java"<span style="color:#000000">);
<span style="color:#008080"> 7 <span style="color:#008000">//<span style="color:#008000"> c.clear();<span style="color:#008000">//<span style="color:#008000">移除所有元素
<span style="color:#008080"> 8 <span style="color:#008000">//<span style="color:#008000"> System.out.println("remove:" + c.remove("hello"));<span style="color:#008000">//<span style="color:#008000">移除一个元素
<span style="color:#008080"> 9 <span style="color:#008000">//<span style="color:#008000"> System.out.println("remove:" + c.remove("javaee"));
<span style="color:#008080">10 <span style="color:#008000">//<span style="color:#008000"> 判断集合中是否包含指定的元素
<span style="color:#008080">11  System.out.println("contains:"+c.contains("hello"));<span style="color:#008000">//<span style="color:#008000">contains:true
<span style="color:#008080">12  System.out.println("contains:"+c.contains("android"));<span style="color:#008000">//<span style="color:#008000">contains:false
<span style="color:#008080">13  <span style="color:#008000">//<span style="color:#008000">判断集合是否为空
<span style="color:#008080">14  System.out.println("isEmpty:"+c.isEmpty());<span style="color:#008000">//<span style="color:#008000">isEmpty:false
<span style="color:#008080">15 <span style="color:#008000">//<span style="color:#008000">元素的个数
<span style="color:#008080">16 System.out.println("size:"+c.size());<span style="color:#008000">//<span style="color:#008000">size:3
<span style="color:#008080">17 System.out.println("c:" + c);<span style="color:#008000">//<span style="color:#008000">c:[hello, world, java]</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.07 Collection集合的高级功能测试

成员方法:

1.  boolean addAll(Collection<? extends E> c):

将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。

2.  boolean removeAll(Collection<?> c):

移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。

3.  boolean containsAll(Collection<?> c):

如果此 collection 包含指定 collection 中的所有元素,则返回 true。

4.  boolean retainAll(Collection<?> c):

仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。换句话说,移除此 collection 中未包含在指定 collection 中的所有元素。

例:

c1.addAll(c2);//将c2集合中的所有元素添加到c1集合中,c1变c2不变
c1.removeAll(c2);//将c1集合中与c2集合相同的所有元素删除,只要有一个相同的就返回true
c1.containsAll(c2);//判断c1集合中的元素是否包含c2中的全部元素,全部包含则返回true c1.retainAll(c2);//将c1集合中与c2集合相同的元素保留,删除其他元素,返回值表示c1集合是否发生变化,发生变化返回true,没有变化返回false.addAll(c2);//将c2集合中的所有元素添加到c1集合中,c1变c2不变
c1.removeAll(c2);//将c1集合中与c2集合相同的所有元素删除,只要有一个相同的就返回true
c1.containsAll(c2);//判断c1集合中的元素是否包含c2中的全部元素,全部包含则返回true c1.retainAll(c2);//将c1集合中与c2集合相同的元素保留,删除其他元素,返回值表示c1集合是否发生变化,发生变化返回true,没有变化返回false

15.08 集合的遍历之集合转数组遍历

Object[] toArray():返回包含此 collection 中所有元素的数组。

例:

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 4 <span style="color:#000000">    {
<span style="color:#008080"> 5         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 6         Collection c = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 7         c.add("hello"<span style="color:#000000">);
<span style="color:#008080"> 8         c.add("world"<span style="color:#000000">);
<span style="color:#008080"> 9         c.add("java"<span style="color:#000000">);
<span style="color:#008080">10         
<span style="color:#008080">11         Object[] objs =<span style="color:#000000"> c.toArray();
<span style="color:#008080">12         <span style="color:#0000ff">for (<span style="color:#0000ff">int i = 0; i < objs.length; i++<span style="color:#000000">) 
<span style="color:#008080">13 <span style="color:#000000">        {
<span style="color:#008080">14             <span style="color:#008000">//<span style="color:#008000">向下转为String类型
<span style="color:#008080">15             String s =<span style="color:#000000"> (String)objs[i];
<span style="color:#008080">16             System.out.println(s+":"+<span style="color:#000000">s.length());
<span style="color:#008080">17 <span style="color:#000000">        }
<span style="color:#008080">18 <span style="color:#000000">    }
<span style="color:#008080">19 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

运行结果:

hello:5
world:5
java:45
world:5
java:4

15.09 Collection存储自定义对象并遍历案例(使用数组)

例:

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 4 <span style="color:#000000">    {
<span style="color:#008080"> 5         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 6         Collection c = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 7         <span style="color:#008000">//<span style="color:#008000">创建学生对象并添加到集合
<span style="color:#008080"> 8         c.add(<span style="color:#0000ff">new Student("小明",23<span style="color:#000000">));
<span style="color:#008080"> 9         c.add(<span style="color:#0000ff">new Student("小红",32<span style="color:#000000">));
<span style="color:#008080">10         c.add(<span style="color:#0000ff">new Student("小强",14<span style="color:#000000">));
<span style="color:#008080">11         c.add(<span style="color:#0000ff">new Student("旺财",8<span style="color:#000000">));
<span style="color:#008080">12         c.add(<span style="color:#0000ff">new Student("张三",16<span style="color:#000000">));
<span style="color:#008080">13         
<span style="color:#008080">14         Object[] objs =<span style="color:#000000"> c.toArray();
<span style="color:#008080">15         <span style="color:#0000ff">for (<span style="color:#0000ff">int i = 0; i < objs.length; i++<span style="color:#000000">) 
<span style="color:#008080">16 <span style="color:#000000">        {
<span style="color:#008080">17             Student s =<span style="color:#000000"> (Student)objs[i];
<span style="color:#008080">18             System.out.println(s.getName()+":"+<span style="color:#000000">s.getAge());
<span style="color:#008080">19 <span style="color:#000000">        }
<span style="color:#008080">20 <span style="color:#000000">    }
<span style="color:#008080">21 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

运行结果:

小明:23
小红:32
小强:14
旺财:8
张三:16:23
小红:32
小强:14
旺财:8
张三:16

15.10 集合的遍历之迭代器遍历

Iterator<E> iterator():返回在此 collection 的元素上进行迭代的迭代器。

例:

<span style="color:#008080"> 1 <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 2 Collection c = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 3 <span style="color:#008000">//<span style="color:#008000">创建元素并添加到集合
<span style="color:#008080"> 4 c.add("hello"<span style="color:#000000">);
<span style="color:#008080"> 5 c.add("world"<span style="color:#000000">);
<span style="color:#008080"> 6 c.add("java"<span style="color:#000000">);
<span style="color:#008080"> 7 <span style="color:#008000">//<span style="color:#008000">获取迭代器,实际返回的是子类对象,多态
<span style="color:#008080"> 8 Iterator it =<span style="color:#000000"> c.iterator();
<span style="color:#008080"> 9 <span style="color:#0000ff">while<span style="color:#000000">(it.hasNext())
<span style="color:#008080">10 <span style="color:#000000">{
<span style="color:#008080">11 <span style="color:#000000">    System.out.println(it.next());
<span style="color:#008080">12 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.11 Collection存储自定义对象并遍历案例(使用迭代器)

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 4 <span style="color:#000000">    {
<span style="color:#008080"> 5         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 6         Collection c = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 7         <span style="color:#008000">//<span style="color:#008000">创建学生对象并添加到集合
<span style="color:#008080"> 8         c.add(<span style="color:#0000ff">new Student("小明",23<span style="color:#000000">));
<span style="color:#008080"> 9         c.add(<span style="color:#0000ff">new Student("小红",32<span style="color:#000000">));
<span style="color:#008080">10         c.add(<span style="color:#0000ff">new Student("小强",14<span style="color:#000000">));
<span style="color:#008080">11         c.add(<span style="color:#0000ff">new Student("旺财",8<span style="color:#000000">));
<span style="color:#008080">12         c.add(<span style="color:#0000ff">new Student("张三",16<span style="color:#000000">));
<span style="color:#008080">13         
<span style="color:#008080">14         Iterator it =<span style="color:#000000"> c.iterator();
<span style="color:#008080">15         <span style="color:#0000ff">while<span style="color:#000000">(it.hasNext())
<span style="color:#008080">16 <span style="color:#000000">        {
<span style="color:#008080">17             Student s =<span style="color:#000000"> (Student)it.next();
<span style="color:#008080">18             System.out.println(s.getName()+":"+<span style="color:#000000">s.getAge());
<span style="color:#008080">19 <span style="color:#000000">        }
<span style="color:#008080">20 <span style="color:#000000">    }
<span style="color:#008080">21 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.12 迭代器使用的问题探讨

1.使用迭代器获取元素的两种方式:

方式1:

Iterator it = c.iterator();
while(it.hasNext())
{
   Student s = (Student)it.next();
   System.out.println(s.getName()+":"+s.getAge()); }it = c.iterator();
while(it.hasNext())
{
   Student s = (Student)it.next();
   System.out.println(s.getName()+":"+s.getAge());
}

方式2:

<span style="color:#0000ff">for(Iterator it =<span style="color:#000000"> c.iterator();it.hasNext();)
{
   Student s =<span style="color:#000000"> (Student)it.next();
   System.out.println(s.getName()+":"+<span style="color:#000000">s.getAge());
}</span></span></span></span>

使用方式2的好处:it在for循环结束后就变成垃圾,效率较高

2.不要多次使用it.next()方法

例:

Iterator it = c.iterator();
while(it.hasNext())
{
   System.out.println(((Student)it.next()).getName());
   System.out.println(((Student)it.next()).getAge());
} c.iterator();
while(it.hasNext())
{
   System.out.println(((Student)it.next()).getName());
   System.out.println(((Student)it.next()).getAge());
}

上面的代码表示获取的是第1个学生的姓名,第2个学生的年龄,以此类推,如果集合中的元素是奇数个,则会报NoSuchElementException错误

15.13 集合的使用步骤图解

集合的使用步骤:

1.  创建集合对象

2.  创建元素对象

3.  将元素添加到集合

4.  遍历集合

4.1 通过集合对象获取迭代器对象

4.2 通过迭代器对象的hasNext()方法判断是否有元素

4.3 通过迭代器对象的Next()方法获取元素并移动到下一个位置

15.14 迭代器的原理及源码解析

原理:

假设迭代器定义的是一个类,那么就可以创建该类的对象,调用该类的方法来实现集合的遍历,但是Java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以存储的方式和遍历的方式也应该是不同的,进而它们的遍历方式也应该是不一样的。最终就没有定义迭代器类

而无论使用哪种集合都应该具备获取元素的操作,并且最好再辅助与判断功能,也就是说判断功能和获取功能应该是一个集合遍历所具备的,而每种集合的方式又不太一样,所以将这两个功能给提取出来,并不提供具体实现,这种方式就是接口,而真正具体的实现类在具体的子类中以内部类的方式体现的

源码:

<span style="color:#0000ff">public <span style="color:#0000ff">interface<span style="color:#000000"> Iterator 
{
	<span style="color:#0000ff">boolean<span style="color:#000000"> hasNext();
	Object next(); 
}
<span style="color:#0000ff">public <span style="color:#0000ff">interface<span style="color:#000000"> Iterable 
{
	Iterator iterator();
}
<span style="color:#0000ff">public <span style="color:#0000ff">interface Collection <span style="color:#0000ff">extends<span style="color:#000000"> Iterable 
{
	Iterator iterator();
}
<span style="color:#0000ff">public <span style="color:#0000ff">interface List <span style="color:#0000ff">extends<span style="color:#000000"> Collection 
{
	Iterator iterator();
}
<span style="color:#0000ff">public <span style="color:#0000ff">class ArrayList <span style="color:#0000ff">implements<span style="color:#000000"> List 
{
	<span style="color:#0000ff">public<span style="color:#000000"> Iterator iterator() 
	{
		<span style="color:#0000ff">return <span style="color:#0000ff">new<span style="color:#000000"> Itr();
	}
	<span style="color:#008000">//<span style="color:#008000">内部类
	<span style="color:#0000ff">private <span style="color:#0000ff">class Itr <span style="color:#0000ff">implements<span style="color:#000000"> Iterator 
	{
		<span style="color:#0000ff">public <span style="color:#0000ff">boolean<span style="color:#000000"> hasNext() {}
		<span style="color:#0000ff">public<span style="color:#000000"> Object next(){} 
	}
}
Collection c = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
c.add("hello"<span style="color:#000000">);
c.add("world"<span style="color:#000000">);
c.add("java"<span style="color:#000000">);
Iterator it = c.iterator();	 <span style="color:#008000">//<span style="color:#008000">new Itr();
<span style="color:#0000ff">while<span style="color:#000000">(it.hasNext()) 
{
	String s =<span style="color:#000000"> (String)it.next();
	System.out.println(s);
}


</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.15 Collection存储字符串并遍历

<span style="color:#008080"> 1 <span style="color:#0000ff">import<span style="color:#000000"> java.util.ArrayList;
<span style="color:#008080"> 2 <span style="color:#0000ff">import<span style="color:#000000"> java.util.Collection;
<span style="color:#008080"> 3 <span style="color:#0000ff">import<span style="color:#000000"> java.util.Iterator;
<span style="color:#008080"> 4  
<span style="color:#008080"> 5 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 6 <span style="color:#000000">{
<span style="color:#008080"> 7 
<span style="color:#008080"> 8    <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 9 <span style="color:#000000">   {
<span style="color:#008080">10 
<span style="color:#008080">11       <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080">12       Collection c = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080">13 
<span style="color:#008080">14       <span style="color:#008000">//<span style="color:#008000">添加字符串
<span style="color:#008080">15       c.add("hello"<span style="color:#000000">);
<span style="color:#008080">16       c.add("你好"<span style="color:#000000">);
<span style="color:#008080">17       c.add("world"<span style="color:#000000">);
<span style="color:#008080">18       c.add("java"<span style="color:#000000">);
<span style="color:#008080">19       c.add("旺财"<span style="color:#000000">);
<span style="color:#008080">20       <span style="color:#008000">//<span style="color:#008000">通过集合对象获取迭代器对象
<span style="color:#008080">21 
<span style="color:#008080">22       Iterator it =<span style="color:#000000"> c.iterator();
<span style="color:#008080">23       <span style="color:#0000ff">while<span style="color:#000000">(it.hasNext())
<span style="color:#008080">24 
<span style="color:#008080">25 <span style="color:#000000">      {
<span style="color:#008080">26          String s =<span style="color:#000000"> (String)it.next();
<span style="color:#008080">27 
<span style="color:#008080">28 <span style="color:#000000">         System.out.println(s);
<span style="color:#008080">29 <span style="color:#000000">      }
<span style="color:#008080">30       
<span style="color:#008080">31 <span style="color:#000000">   }
<span style="color:#008080">32 
<span style="color:#008080">33 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.16 Collection存储学生对象并遍历

<span style="color:#008080"> 1 <span style="color:#0000ff">import<span style="color:#000000"> java.util.ArrayList;
<span style="color:#008080"> 2 <span style="color:#0000ff">import<span style="color:#000000"> java.util.Collection;
<span style="color:#008080"> 3 <span style="color:#0000ff">import<span style="color:#000000"> java.util.Iterator;
<span style="color:#008080"> 4 
<span style="color:#008080"> 5 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 6 <span style="color:#000000">{
<span style="color:#008080"> 7     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 8 <span style="color:#000000">    {
<span style="color:#008080"> 9         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080">10         Collection c = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080">11         <span style="color:#008000">//<span style="color:#008000">创建学生对象并添加到集合
<span style="color:#008080">12         c.add(<span style="color:#0000ff">new Student("小明",23<span style="color:#000000">));
<span style="color:#008080">13         c.add(<span style="color:#0000ff">new Student("小红",32<span style="color:#000000">));
<span style="color:#008080">14         c.add(<span style="color:#0000ff">new Student("小强",14<span style="color:#000000">));
<span style="color:#008080">15         c.add(<span style="color:#0000ff">new Student("旺财",8<span style="color:#000000">));
<span style="color:#008080">16         c.add(<span style="color:#0000ff">new Student("张三",16<span style="color:#000000">));
<span style="color:#008080">17         
<span style="color:#008080">18         Iterator it =<span style="color:#000000"> c.iterator();
<span style="color:#008080">19         <span style="color:#0000ff">while<span style="color:#000000">(it.hasNext())
<span style="color:#008080">20 <span style="color:#000000">        {
<span style="color:#008080">21             Student s =<span style="color:#000000"> (Student)it.next();
<span style="color:#008080">22             System.out.println(s.getName()+":"+<span style="color:#000000">s.getAge());
<span style="color:#008080">23 <span style="color:#000000">        }
<span style="color:#008080">24 <span style="color:#000000">    }
<span style="color:#008080">25 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.17 List存储字符串并遍历

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 4 <span style="color:#000000">    {
<span style="color:#008080"> 5         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 6         List list = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 7         list.add("hello"<span style="color:#000000">);
<span style="color:#008080"> 8         list.add("world"<span style="color:#000000">);
<span style="color:#008080"> 9         list.add("java"<span style="color:#000000">);
<span style="color:#008080">10         
<span style="color:#008080">11         Iterator it =<span style="color:#000000"> list.iterator();
<span style="color:#008080">12         <span style="color:#0000ff">while<span style="color:#000000">(it.hasNext())
<span style="color:#008080">13 <span style="color:#000000">        {
<span style="color:#008080">14             String s =<span style="color:#000000"> (String)it.next();
<span style="color:#008080">15 <span style="color:#000000">            System.out.println(s);
<span style="color:#008080">16 <span style="color:#000000">        }
<span style="color:#008080">17 <span style="color:#000000">    }
<span style="color:#008080">18 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.18 List集合的特点

List接口概述:有序的(存取顺序一致)collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

特点:与 set 不同,列表通常允许重复的元素。

15.19 List存储学生对象并遍历

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 4 <span style="color:#000000">    {
<span style="color:#008080"> 5         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 6         List list = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 7         <span style="color:#008000">//<span style="color:#008000">创建学生对象并添加到集合
<span style="color:#008080"> 8         list.add(<span style="color:#0000ff">new Student("小明",23<span style="color:#000000">));
<span style="color:#008080"> 9         list.add(<span style="color:#0000ff">new Student("小红",32<span style="color:#000000">));
<span style="color:#008080">10         list.add(<span style="color:#0000ff">new Student("小强",14<span style="color:#000000">));
<span style="color:#008080">11         list.add(<span style="color:#0000ff">new Student("旺财",8<span style="color:#000000">));
<span style="color:#008080">12         list.add(<span style="color:#0000ff">new Student("张三",16<span style="color:#000000">));
<span style="color:#008080">13         
<span style="color:#008080">14         Iterator it =<span style="color:#000000"> list.iterator();
<span style="color:#008080">15         <span style="color:#0000ff">while<span style="color:#000000">(it.hasNext())
<span style="color:#008080">16 <span style="color:#000000">        {
<span style="color:#008080">17             Student s =<span style="color:#000000"> (Student)it.next();
<span style="color:#008080">18             System.out.println(s.getName()+":"+<span style="color:#000000">s.getAge());
<span style="color:#008080">19 <span style="color:#000000">        }
<span style="color:#008080">20 <span style="color:#000000">    }
<span style="color:#008080">21 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.20 List集合的特有功能概述和测试

1.  void add(int index,Eelement):

在列表的指定位置插入指定元素(可选操作)。

2.  Eremove(int index):

移除列表中指定位置的元素(可选操作)。

3.  Eget(int index):

返回列表中指定位置的元素。

4.  Eset(int index, Eelement):

用指定元素替换列表中指定位置的元素(可选操作)。

例:

list.add(2,"javaee");//在2的位置插入javaee,改变集合长度

list.get(2)//返回集合中2位置上的元素,不改变集合长度

list.remove(1)//删除集合中1位置上的元素,返回被删除的元素,改变集合长度

list.set(2, "javaee")//将集合中2位置上的元素替换为javaee,返回被替换的元素,不改变集合长度

15.21 List集合的特有遍历功能

<span style="color:#008080">1 <span style="color:#0000ff">for (<span style="color:#0000ff">int i = 0; i < list.size(); i++<span style="color:#000000">) 
<span style="color:#008080">2 
<span style="color:#008080">3 <span style="color:#000000">{
<span style="color:#008080">4 
<span style="color:#008080">5    String s =<span style="color:#000000"> (String)list.get(i);
<span style="color:#008080">6 
<span style="color:#008080">7 <span style="color:#000000">   System.out.println(s);
<span style="color:#008080">8 
<span style="color:#008080">9 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.22 List存储自定义对象并遍历(使用List特有功能遍历)

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 4 <span style="color:#000000">    {
<span style="color:#008080"> 5         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 6         List list = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 7         <span style="color:#008000">//<span style="color:#008000">创建学生对象并添加到集合
<span style="color:#008080"> 8         list.add(<span style="color:#0000ff">new Student("小明",23<span style="color:#000000">));
<span style="color:#008080"> 9         list.add(<span style="color:#0000ff">new Student("小红",32<span style="color:#000000">));
<span style="color:#008080">10         list.add(<span style="color:#0000ff">new Student("小强",14<span style="color:#000000">));
<span style="color:#008080">11         list.add(<span style="color:#0000ff">new Student("旺财",8<span style="color:#000000">));
<span style="color:#008080">12         list.add(<span style="color:#0000ff">new Student("张三",16<span style="color:#000000">));
<span style="color:#008080">13         
<span style="color:#008080">14         <span style="color:#0000ff">for (<span style="color:#0000ff">int i = 0; i < list.size(); i++<span style="color:#000000">) 
<span style="color:#008080">15 <span style="color:#000000">        {
<span style="color:#008080">16             Student s =<span style="color:#000000">(Student)list.get(i);
<span style="color:#008080">17             System.out.println(s.getName()+":"+<span style="color:#000000">s.getAge());
<span style="color:#008080">18 <span style="color:#000000">        }
<span style="color:#008080">19 <span style="color:#000000">    }
<span style="color:#008080">20 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

15.23 ListIterator的特有功能

ListIterator<E> listIterator():

返回此列表元素的列表迭代器(按适当顺序)。

注意:ListIterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历

例:

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 4 <span style="color:#000000">    {
<span style="color:#008080"> 5         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 6         List list = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 7         
<span style="color:#008080"> 8         list.add("hello"<span style="color:#000000">);
<span style="color:#008080"> 9         list.add("world"<span style="color:#000000">);
<span style="color:#008080">10         list.add("java"<span style="color:#000000">);
<span style="color:#008080">11         <span style="color:#008000">//<span style="color:#008000">列表迭代器
<span style="color:#008080">12         ListIterator lit =<span style="color:#000000"> list.listIterator();
<span style="color:#008080">13         <span style="color:#008000">//<span style="color:#008000">正向遍历
<span style="color:#008080">14         <span style="color:#0000ff">while<span style="color:#000000">(lit.hasNext())
<span style="color:#008080">15 <span style="color:#000000">        {
<span style="color:#008080">16             String s =<span style="color:#000000"> (String)lit.next();
<span style="color:#008080">17 <span style="color:#000000">            System.out.println(s);
<span style="color:#008080">18 <span style="color:#000000">        }
<span style="color:#008080">19         System.out.println("-----"<span style="color:#000000">);
<span style="color:#008080">20         <span style="color:#008000">//<span style="color:#008000">逆向遍历
<span style="color:#008080">21         <span style="color:#0000ff">while<span style="color:#000000">(lit.hasPrevious())
<span style="color:#008080">22 <span style="color:#000000">        {
<span style="color:#008080">23             <span style="color:#008000">//<span style="color:#008000">获取上一个元素
<span style="color:#008080">24             String s =<span style="color:#000000"> (String)lit.previous();
<span style="color:#008080">25 <span style="color:#000000">            System.out.println(s);
<span style="color:#008080">26 <span style="color:#000000">        }
<span style="color:#008080">27         
<span style="color:#008080">28 <span style="color:#000000">    }
<span style="color:#008080">29 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

运行结果:

hello

world

java

-----

java

world

hello

15.24 并发修改异常的产生原因及解决方案

例:

<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Practice 
<span style="color:#008080"> 2 <span style="color:#000000">{
<span style="color:#008080"> 3     <span style="color:#0000ff">public <span style="color:#0000ff">static <span style="color:#0000ff">void<span style="color:#000000"> main(String[] args)
<span style="color:#008080"> 4 <span style="color:#000000">    {
<span style="color:#008080"> 5         <span style="color:#008000">//<span style="color:#008000"> 创建集合
<span style="color:#008080"> 6         List list = <span style="color:#0000ff">new<span style="color:#000000"> ArrayList();
<span style="color:#008080"> 7         
<span style="color:#008080"> 8         list.add("hello"<span style="color:#000000">);
<span style="color:#008080"> 9         list.add("world"<span style="color:#000000">);
<span style="color:#008080">10         list.add("java"<span style="color:#000000">);
<span style="color:#008080">11         Iterator it =<span style="color:#000000"> list.iterator();
<span style="color:#008080">12         <span style="color:#0000ff">while<span style="color:#000000">(it.hasNext())
<span style="color:#008080">13 <span style="color:#000000">        {
<span style="color:#008080">14             String s =<span style="color:#000000"> (String)it.next();
<span style="color:#008080">15             <span style="color:#0000ff">if(s.equals("world"<span style="color:#000000">))
<span style="color:#008080">16                 list.add("javaee"<span style="color:#000000">);    
<span style="color:#008080">17 <span style="color:#000000">}
<span style="color:#008080">18 <span style="color:#000000">        System.out.println(list);
<span style="color:#008080">19 <span style="color:#000000">    }
<span style="color:#008080">20 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

上面的代码会运行错误,发生ConcurrentModificationException异常

错误产生原因:迭代器是依赖于集合存在的,在迭代的过程中使用集合的方法添加元素迭代器是不知道的,所以报错,并发修改异常

解决方案:1.用迭代器迭代元素时使用迭代器修改元素(ListIterator列表迭代器),添加的元素在迭代的元素后面

2.用集合遍历元素,用集合修改元素(for循环),添加的元素在最后

15.25 数据结构之栈和队列

数据结构:数据的组织方式

15.26 数据结构之数组和链表

数组:存储同一种类型的多个元素的容器

链表:由一个链子把多个节点(数据和节点)连起来组成的数据

15.27 List的三个子类的特点

ArrayList:底层数据结构是数组,查询快,增删慢,是不同步的,线程不安全,效率高

Vector:底层数据结构是数组,查询快,增删慢,是同步的,线程安全,效率低

LinkedList:底层数据结构是链表,查询慢,增删快,是不同步的,线程不安全,效率高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值