1:对象数组(掌握)
  (1)数组既可以存储基本数据类型,也可以存储引用类型。它存储引用类型的时候的数组就叫对象数组。

2:集合(Collection)(掌握)
(1)集合的由来?
  我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组
  而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。
(2)集合和数组的区别?
    A:长度区别
      数组固定
      集合可变
    B:内容区别
      数组可以是基本类型,也可以是引用类型
      集合只能是引用类型
    C:元素内容
      数组只能存储同一种类型
      集合可以存储不同类型(其实集合一般存储的也是同一种类型)
(3)集合的继承体系结构?
    由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。

      Collection
      |--List
      |--ArrayList
      |--Vector
      |--LinkedList
      |--Set
      |--HashSet
      |--TreeSet
(4)Collection的功能概述(自己补齐)
    A:添加功能:boolean add(E e)确保此 collection 包含指定的元素(可选操作)。
    B:删除功能:boolean remove(Object o)从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
    C:判断功能:
      boolean isEmpty()如果此 collection 不包含元素,则返回 true。
      boolean contains(Object o)如果此 collection 包含指定的元素,则返回 true
    D:获取功能:Iterator<E> iterator()返回在此 collection 的元素上进行迭代的迭代器。
    E:长度功能:int size()返回此 collection 中的元素数。
    F:交集(了解):boolean retainAll(Collection<?> c)仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
    G:把集合转数组(了解):Object[] toArray()返回包含此 collection 中所有元素的数组。
(5)Collection集合的遍历
    A:把集合转数组(了解)
    B:迭代器(集合专用方式)
(6)迭代器
    A:是集合的获取元素的方式。
    B:是依赖于集合而存在的。
    C:迭代器的原理和源码。
      a:为什么定义为了一个接口而不是实现类?
      b:看了看迭代器的内部类实现。
(7)Collection集合的案例(遍历方式 迭代器)
    集合的操作步骤:
      A:创建集合对象
      B:创建元素对象
      C:把元素添加到集合
      D:遍历集合

A:存储字符串并遍历
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;

public class CollectionDemo {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();

//创建并添加元素
c.add("hello");
c.add("world");
c.add("java");

//遍历集合
Iterator it = c.iterator();
while(it.hasNext()) {
String s =(String) it.next();
System.out.println(s);
}
}
}

B:存储自定义对象并遍历
public class Student {
private String name;
private int age;

public Student(){}

public Student(String name,int age) {
this.name = name;
this.age = age;
}

//getXxx()/setXxx()
}

import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;

public class StudentDemo {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();

//创建学生对象
Student s1 = new Student("林青霞",27);
Student s2 = new Student("风清扬",30);
Student s3 = new Student("刘意",30);
Student s4 = new Student("武鑫",25);
Student s5 = new Student("刘晓曲",16);

//添加元素
c.add(s1);
c.add(s2);
c.add(s3);
c.add(s4);
c.add(s5);

//遍历集合
Iterator it = c.iterator();
while(it.hasNext()) {
Student s = (Student)it.next();
System.out.println(s.getName()+"---"+s.getAge());
}
}
}

3:集合(List)(掌握)

(1)List是Collection的子接口
特点:有序(存储顺序和取出顺序一致),可重复。
(2)List的特有功能:(自己补齐)
A:添加功能:void add(int index,E element)在列表的指定位置插入指定元素(可选操作)。
B:删除功能:E remove(int index)移除列表中指定位置的元素(可选操作)。
C:获取功能:E get(int index)返回列表中指定位置的元素。
D:迭代器功能:ListIterator<E> listIterator()返回此列表元素的列表迭代器(按适当顺序)。 (list集合特有的迭代器,双向迭代器,普通的迭代器iterator是单向的。并且必须先正向遍历后,才能反向遍历)
E:修改功能:E set(int index,E element)用指定元素替换列表中指定位置的元素(可选操作)。
(3)List集合的特有遍历功能
A:由size()和get()结合。
B:代码演示
//创建集合对象
List list = new ArrayList();

//创建并添加元素
list.add("hello");
list.add("world");
list.add("java");

//遍历集合
Iterator it = list.iterator();
while(it.hasNext()) {
String s =(String) it.next();
System.out.println(s);
}
System.out.println("----------");

for(int x=0; x<list.size(); x++) {
String s =(String) list.get(x);
System.out.println(s);
}
(4)列表迭代器的特有功能;(了解)
可以逆向遍历,但是要先正向遍历,所以无意义,基本不使用。
(5)并发修改异常(所以在用迭代器遍历集合时,不能通过集合对象来修改集合)
A:出现的现象
迭代器遍历集合,集合修改集合元素
B:原因
迭代器是依赖于集合的,而集合的改变迭代器并不知道。
C:解决方案
a:迭代器遍历,迭代器修改(ListIterator),就是用迭代器来修改集合元素。
元素添加在刚才迭代的位置
b:集合遍历,集合修改(size()和get())
元素添加在集合的末尾
(6)常见数据结构
A:栈 先进后出
B:队列 先进先出
C:数组 查询快,增删慢
D:链表 查询慢,增删快
(7)List的子类特点(面试题)
ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。

到底使用谁呢?看需求?
分析:
要安全吗?
要:Vector(即使要,也不使用这个,后面再说)
不要:ArrayList或者LinkedList
查询多;ArrayList
增删多:LinkedList

什么都不知道,就用ArrayList。
(8)List集合的案例(遍历方式 迭代器和普通for)
A:存储字符串并遍历
B:存储自定义对象并遍历

4、List的子类(掌握)

  (1)List的子类特点
    ArrayList:
      底层数据结构是数组,查询快,增删慢
      线程不安全,效率高
    Vector:
      底层数据结构是数组,查询快,增删慢
      线程安全,效率低
    LinkedList:
      底层数据结构是链表,查询慢,增删快
      线程不安全,效率高
  (2)ArrayList
    A:没有特有功能需要学习
    B:案例
      a:ArrayList存储字符串并遍历
      b:ArrayList存储自定义对象并遍历
  (3)Vector
    A:有特有功能
      a:添加
      public void addElement(E obj) -- add()
      b:获取
      public E elementAt(int index) -- get()
      public Enumeration<E> elements() -- iterator()
    B:案例
      a:Vector存储字符串并遍历
      b:Vector存储自定义对象并遍历
  (4)LinkedList
    A:有特有功能
      a:添加
        addFirst() //在开头添加
        addLast() //在结尾添加
      b:删除
        removeFirst() //删除第一个
        removeLast() //删除最后一个
      c:获取
        getFirst() //获取第一个元素
        getLast() //获取最后一个元素
    B:案例
    a:LinkedList存储字符串并遍历
    b:LinkedList存储自定义对象并遍历
  (5)案例:
    A:去除集合中的多个字符串的重复元素(如果字符串的内容相同,即为重复元素)
      思路1:重新创建一个集合,遍历原集合的每一个元素,判断新集合中是否有该元素(contains),若有,则不添加,若没有,则添加到新集合中。(该思路需要创建一个新的集合)
      思路2:由选择排序的思想,从第一个元素开始,与后面的元素比较,若发现后面有重复,就删除后面的元素即可。(该思路在原来的集合上进行,但是要注意删除之后,后面的元素往前移动了一位,因此,需要将比较的元素也往前移动一位。)
    B:去除集合中的多个自定义对象的重复元素(如果自定义对象的成员变量值都相同,即为重复元素)
      思路:实现方法跟上面的方法一样,只不过需要注意的是两个元素之间比较的时候,是调用equals方法,因此自定义类型必须要重写equals方法(自动生成即可)。
    C:用LinkedList模拟一个栈数据结构的集合类,并测试。(你要定义一个集合类,只不过内部可以使用LinkedList来实现。)
      首先需要明白栈的特点,然后要明白Linkedlist的特有功能。

java中Collection类及其子类的更多相关文章

  1. 关于Java中基类构造器的调用问题

    在<Java编程思想>第7章复用类中有这样一段话,值得深思.当子类继承了父类时,就涉及到了基类和导出类(子类)这两个类.从外部来看,导出类就像是一个与基类具有相同接口的新类,或许还会有一些 ...

  2. 第四节:详细讲解Java中的类和面向对象思想

    前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...

  3. 细说java中的类

    前言 最近在学习<java编程思想> 学到了内部类 类不就是class吗 天天用 还能讲出花来了不成... 其实不然,在java中,类的种类和使用方式多种多样,花样繁多.其中主要有 普通类 ...

  4. Java中Class类详解、用法及泛化

    Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方 ...

  5. Java中Class类及用法

    Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方 ...

  6. Java中String类为什么被设计为final?

    Java中String类为什么被设计为final   首先,String是引用类型,也就是每个字符串都是一个String实例.通过源码可以看到String底层维护了一个byte数组:private f ...

  7. 基础知识(05) -- Java中的类

    Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...

  8. JAVA中的类和接口

    1.类: 类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...

  9. java中Color类的简单总结

    java中Color类的简单总结 1.颜色的常识 任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值 介于0-255之间(8位表示) 2.Color类中的常量 publi ...

随机推荐

  1. Dynamics AX 2012 R2 配置E-Mail模板

    在AX中使用邮件模板可以,可以让邮件的内容更专业化.下面,跟随Reinhard一起,配置E-Mail模板吧. 进入Organization Administration>Setup>E-m ...

  2. Java在Web开发语言上败给了PHP

    PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...

  3. size_t总结

    1.sizeof返回的必定是无符号整形,在标准c中通过 typedef 将返回值类型定义为size_t. 若用printf输出size_t类型时,C99中定义格式符%zd;若编译器不支持可以尝试%u或 ...

  4. ubuntu环境极其内存情况

    001:安装系统后 002:synergy 003:vim-cscope (修改vim脚本) 004:root 005:bashrc修改 006:bcompare 007:lib 008:git,gi ...

  5. Auty自动化测试框架第二篇——读取与执行脚本列表

    [本文出自天外归云的博客园] 在Auty中的文件结构,lib目录下的read_selection.py和execute_selection.py文件:

  6. logging模块转载博客

     转载自:http://blog.csdn.net/zyz511919766/article/details/25136485 简单将日志打印到屏幕: [python] view plain copy ...

  7. 通过Mac远程调试iPhone/iPad上的网页(转)

    我们知道在 Mac/PC 上的浏览器都有 Web 检查器这类的工具(如最著名的 Firebug)对前端开发进行调试,而在 iPhone/iPad 由于限于屏幕的大小和触摸屏的使用习惯,直接对网页调试非 ...

  8. WINDOWS Composer & PHPUnit 安装记录

    Windows: 安装Composer: 下载了composer_setup.exe 运行之后提示和Xdebug冲突,在php.ini中注释掉php_xdebug.dll,再次运行.通过 compos ...

  9. consul笔记-集群加入的问题

    加入集群的问题 1 只有2个server的时候,一个挂掉,不会选举出新的leader. 2 使用 -bootstrap 可以直接启动为leader,这和-bootstrap-expect 是有区别的 ...

  10. 安装openJDK 8

    1.JDK 8 示例 (1.1)Debian, Ubuntu等使用下述安装命令: $ -jre ps : openjdk-8-jre 仅包含JRE,如果需要开发java程序,需要下载openjdk-8 ...