集合:
我们学习的是面向对象语言,而面向对象语言是对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储,而要想存储对个对象,就不能是一个基本的变量,而应该是一个容器的变量,在目前所学的知识,容器类型的有:数组和StringBuffer,但是StringBuffer 的结果是个字符串,所以我们只能选择数组,这就是对象数组。而对象数组又不能适应变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,java就提供了集合类供我们使用。
数组和集合的区别:
1、长度区别:
数组长度固定
集合长度可变
2、内容不同:
数组存储的是同一类型的元素
集合存储的是不同类型的元素
3、元素的数据类型
数组可以存储基本类型,也可以存储引用类型
集合只能存储引用类型(只能用来装对象)
集合是存储多个元素的,存储多个元素会有不用的需求,比如:不能出现相同的元素,或者按照某一规则进行排序,针对不同的需求,java就提供了不同的集合类,这过个集合的数据结构不同。结构不同不重要,重要的是能够存储东西,并且还要能够使用;那么这多个集合使用共性的内容的,我们这这些集合类的共性不断向上提取,最终就能形成集合的继承体系结构。
java提供多种集合类,而他们的数据结构不同,但是肯定会有共性的内容(判断,获取,存储等)通过不断地向上提取,我们就可以得到一个集合的继承体系结构图:
Collection(集合)
分析:从具体到抽象
实现:从抽象到具体
使用:使用具体类
数据结构:数据的存储方式
Collection :是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的有无序的,
1、添加
boolean add(Object obj) //添加一个元素
boolean addAll(Collection c) //添加一个集合的元素
2、删除
void clear() //移除所有元素
boolean remove(Object obj) //移除一个元素
boolean remove(Collection c) //移除一个集合的元素
3、判断
boolean contains(Object o) //判断集合是否包含指定的元素
boolean contains(Collection c) //判断集合是否包含指定的集合元素
boolean isEmpty() //判断集合是否为空
4、获取(查找)
Iterator<E> iterator()
5、长度功能:
int size() //元素的个数
6、交集功能:
boolean retainAll(Collection c) //两个集合都有的元素
7、把集合转换为数组
Object [ ] toArray
package cn.Collection;import java.util.ArrayList;import java.util.Collection;/*** Collection :是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的有无序的,* 1、添加* boolean add(Object obj) //添加一个元素* boolean addAll(Collection c) //添加一个集合的元素* 2、删除* void clear() //移除所有元素* boolean remove(Object obj) //移除一个元素* boolean remove(Collection c) //移除一个集合的元素* 3、判断* boolean contains(Object o) //判断集合是否包含指定的元素* boolean contains(Collection c) //判断集合是否包含指定的集合元素* boolean isEmpty() //判断集合是否为空* 4、获取(查找)* Iterator<E> iterator()* 5、长度功能:* int size() //元素的个数* 6、交集功能:* boolean retainAll(Collection c) //两个集合都有的元素* 7、把集合转换为数组* Object [ ] toArray** */public class CollectionDemo {public static void main(String[] args) {//测试不带All的方法//创建集合对象//Collection c = new Collection() //这是错误的,接口不能实例化Collection c = new ArrayList();//boolean add(Object obj) //添加一个元素//System.out.println("add= "+ c.add("hello"));c.add("hello");c.add("world");c.add("java");//void clear() 移除所有元素//c.clear(); // c.clear();移除所有元素// System.out.println("remove= "+c.remove("hello")); //c = [world, java] 移除hello// System.out.println("remove = "+ c.remove("hhhh")); //判断不在给集合的元素,就false//boolean contains(Object o) //判断集合是否包含指定的元素// System.out.println("contains = " + c.contains("hello"));// System.out.println("contains = "+ c.contains("heee")); //false//boolean is Empty() //判断集合是否为空//c.clear();//移除元素, 但是c = [],还有规则System.out.println("isEmpty= " + c.isEmpty()); //false//int size 长度System.out.println("size= " + c.size());System.out.println("c = " + c);}}
package cn.Collection;import java.util.ArrayList;import java.util.Collection;/*** Collection :是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的有无序的,* 1、添加* boolean add(Object obj) //添加一个元素* boolean addAll(Collection c) //添加一个集合的元素* 2、删除* void clear() //移除所有元素* boolean remove(Object obj) //移除一个元素* boolean removeAll(Collection c) //移除一个集合的元素* 3、判断* boolean contains(Object o) //判断集合是否包含指定的元素* boolean contains(Collection c) //判断集合是否包含指定的集合元素* boolean isEmpty() //判断集合是否为空* 4、获取(查找)* Iterator<E> iterator()* 5、长度功能:* int size() //元素的个数* 6、交集功能:* boolean retainAll(Collection c) //两个集合都有的元素* 7、把集合转换为数组* Object [ ] toArray** */public class CollectionDemo_02 {public static void main(String[] args) {//测试带All的对象//创建集合对象1Collection c1 = new ArrayList();c1.add("abc1");c1.add("abc2");c1.add("abc3");c1.add("abc4");//创建集合对象2Collection c2 = new ArrayList();// c2.add("abc1");// c2.add("abc2");// c2.add("abc3");// c2.add("abc4");//c2.add("abc4"); //可以重复,同样可以输出c2.add("abc5");c2.add("abc6");c2.add("abc7");//boolean addAll(Collection c) //添加一个集合的元素//System.out.println("addAll= "+ c1.addAll(c2)); //在c1里面添加了c2 的集合元素//boolean removeAll(Collection c) //移除一个集合的元素//System.out.println("removeAll= " + c1.removeAll(c2)); //只要移除一个元素,就返回true//boolean containsAll(Collection c) 判断集合中是否包含了指定元素的集合//System.out.println("containsAll = " + c1.containsAll(c2)); //只有包含所有的元素(只有包含所有的元素才叫包含),才会true//boolean retainAll(Collection c) //两个集合都有的元素/*** 假设有两个集合与B* A对B做交集,最终的结果保存在A中,B不变,* 返回值表示的是A是否发生了改变* */System.out.println("retainAll = "+ c1.retainAll(c2));System.out.println("c1 = " + c1);System.out.println("c2 = " + c2);}}
package cn.Collection;import java.util.ArrayList;import java.util.Collection;/*** 集合的遍历:依次获取集合中的每一个元素* Object[] toArray 把集合转成数组** */public class CollectionDemo_03 {public static void main(String[] args) {//创建集合对象Collection c = new ArrayList();//添加元素c.add("hello"); //Object obj = "hello";向上转型c.add("world");c.add("java");//遍历//Object [] toArray()Object[] obj = c.toArray();for (int x = 0; x < obj.length; x++) {//System.out.println(obj[x]);//如何获取元素的同时获取字符串的长度// System.out.println(obj[x] + "---" + obj[x].length); //因为Object没有length方法//如果要获取长度就必须转为字符串//向下转型String s = (String )obj[x];System.out.println("s = " + s+"---"+s.length());}}}
package Iterator;import javax.naming.spi.ObjectFactoryBuilder;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;/*** Iterator iterator() 迭代器,集合专门用来遍历** Object next() 获取元素,并移到下一个位置* boolean hasNext(); 如果仍还有元素可以迭代,则返回true**** */public class IteratorDemo_01 {public static void main(String[] args) {//创建结合对象Collection c = new ArrayList();//创建并添加元素// String s = "hello";// c.add(s);c.add("hello");c.add("world");c.add("java");//Iterator iterator() 迭代器Iterator it = c.iterator(); //返回的是子类对象,这里是多态// Object obj = it.next();// System.out.println("obj = " + obj);// System.out.println(it.next());// System.out.println(it.next());// System.out.println(it.next());// System.out.println(it.next()); //会报错//最后一个不应该写,在前面应该加一个判断,判断是否有下一个元素,/*if(it.hasNext()){System.out.println(it.next());}if(it.hasNext()){System.out.println(it.next());}if(it.hasNext()){System.out.println(it.next());}if(it.hasNext()){System.out.println(it.next());}*/while(it.hasNext()){//System.out.println(it.next());String s = (String) it.next(); //因为next的返回ObjectSystem.out.println("s = " + s);}}}
package Iterator;import cn.CollectionTest.Student;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;/*** 使用集合存储5名学生对象,然后使用迭代器遍历** */public class IteratorTest {public static void main(String[] args) {//创建集合对象Collection c = new ArrayList();//创建学生对象Student s1 = new Student("小明", 27);Student s2 = new Student("小红", 30);Student s3 = new Student("小东", 33);Student s4 = new Student("小丽", 25);Student s5 = new Student("小王", 22);//把学生对象添加到集合:c.add(s1);c.add(s2);c.add(s3);c.add(s4);c.add(s5);//遍历Iterator it = c.iterator();while(it.hasNext()){//System.out.println(it.next()); //如果重写了toString方法,这样就不会输出地址值//System.out.println("-----------------");Student s = (Student)it.next(); //如果没有重写toString方法,可以这样使用System.out.println(s.getName()+"---"+ s.getAge());}}}
package Iterator;import cn.CollectionTest.Student;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;/*** 使用集合存储5名学生对象,然后使用迭代器遍历** */public class IteratorTest_02 {public static void main(String[] args) {//创建集合对象Collection c = new ArrayList();//创建学生对象Student s1 = new Student("小明", 27);Student s2 = new Student("小红", 30);Student s3 = new Student("小东", 33);Student s4 = new Student("小丽", 25);Student s5 = new Student("小王", 22);//把学生对象添加到集合:c.add(s1);c.add(s2);c.add(s3);c.add(s4);c.add(s5);//遍历Iterator it = c.iterator();while(it.hasNext()){//System.out.println(it.next()); //如果重写了toString方法,这样就不会输出地址值//System.out.println("-----------------");Student s = (Student)it.next(); //如果没有重写toString方法,可以这样使用System.out.println(s.getName()+"---"+ s.getAge());//System.out.println(((Student)it.next()).getName()+"---"+((Student)it.next()).getAge()); //这样会报错//不要多次使用it.next()}//用for循环改进(这个效率高)// for(Iterator it = c.iterator(); it.hasNext();){// Student s = (Student)it.next();// System.out.println(s.getName()+ "---" +s.getAge());// }//}}
Iterator
迭代器:是集合遍历的一种方式
迭代器:是依赖于Collection而存在的
集合的使用步骤
1、创建集合对象:
Collection c = new ArrayList();
2、创建元素对象并添加:
Student s = new Student(“小明”,23);
3、把元素添加到集合中
c.add(s);
4、遍历
a、通过集合获取迭代器对象
Iterator it = c.iterator();
b、通过迭代器对象的hasNext()方法判断是否有元素
c、通过迭代器的next()方法获取元素并移动到下一个位置
Iterator 的使用方法
Iterator it = c.iterator();while(it.hasNext()){//System.out.println(it.next()); //如果重写了toString方法,这样就不会输出地址值//System.out.println("-----------------");Student s = (Student)it.next(); //如果没有重写toString方法,可以这样使用System.out.println(s.getName()+"---"+ s.getAge());//System.out.println(((Student)it.next()).getName()+"---"+((Student)it.next()).getAge()); //这样会报错//不要多次使用it.next()}//用for循环改进(这个效率高)// for(Iterator it = c.iterator(); it.hasNext();){// Student s = (Student)it.next();// System.out.println(s.getName()+ "---" +s.getAge());// }
package cn.Collection;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;/*** 需求:储存自定义对象并遍历;String(name,age)** 分析:* 1、创建学生类* 2、创建集合类* 3、创建学生对象* 4、把学生对象添加到集合对象中* 5、遍历** */public class CollectionTest {public static void main(String[] args) {//创建集合集合对象Collection c = new ArrayList();//创建学生对象Student s1 = new Student("貂蝉", 25);Student s2 = new Student("小婵", 16);Student s3 = new Student("黄月英", 20);Student s4 = new Student();s4.setName("大乔");s4.setAge(24);//把学生对象添加到集合中c.add(s1);c.add(s2);c.add(s3);c.add(s4);c.add(new Student("孙尚香",19)); //匿名对象//遍历// Iterator it = c.iterator();// while(it.hasNext()){// //System.out.println(it.next());// Student s = (Student )it.next();// System.out.println(s.getName()+"---"+ s.getAge());for(Iterator it = c.iterator();it.hasNext();){Student s = (Student)it.next();System.out.println(s.getName()+"---"+s.getAge());}}}
- 分析:
1、创建学生类
2、创建集合类
3、创建学生对象
4、把学生对象添加到集合对象中
* 5、遍历
List的特有功能:
a、添加功能:
void add(int index;Object element) //在指定位置添加元素
b、获取功能:
Object get(int index) //获取指定位置的元素
c、列表迭代器:
ListIterator listIterator() List集合特有的迭代器
d、删除功能:
Object remove(int index) //根据索引删除元素;返回被删除元素
e、修改功能:
Object set(int index,Object element) //根据索引修改元素,返回被修改的元素
package cn.List;import java.util.ArrayList;import java.util.List;/*** List集合的特有功能:* a、添加功能:* void add(int index;Object element) //在指定位置添加元素* b、获取功能:* Object get(int index) //获取指定位置的元素* c、列表迭代器:* ListIterator listIterator() List集合特有的迭代器* d、删除功能:* Object remove(int index) //根据索引删除元素;返回被删除元素* e、修改功能:* Object set(int index,Object element) //根据索引修改元素,返回被修改的元素*** */public class ListDemo_02 {public static void main(String[] args) {//创建集合对象List list = new ArrayList();//添加元素list.add("hello");list.add("world");list.add("java");//调用方法//添加功能 void add(int index,Object element) //在指定位置添加元素// list.add(1,"你好");//list.add(11,34); //索引越界//list.add(3,"javaEE"); //没有问题//list.add(4,"javaEE"); //有问题//Object get(int index); //获取制定位置的元素//System.out.println(list.get(1));//System.out.println(list.get(12)); //索引越界//Object remove(int index) //根据索引删除元素,返回删除元素//System.out.println(list.remove(0));//Object set(int index,Object element) //根据索引元素修改元素,返回被修改元素System.out.println(list.set(1,"WOTLD"));System.out.println("list = " + list); //list = [hello, world, java]}}
* list 集合特有的遍历功能* size和get功能的结合** 获取集合长度size* for(int x = 0 ;x<list.size() ;x++){* System.out.println("list = " + list.get(x)); //get 是获取每个元素* }
package cn.List;import java.util.ArrayList;import java.util.List;/*** list 集合特有的遍历功能* size和get功能的结合* <p>* 获取集合长度size* for(int x = 0 ;x<list.size() ;x++){* System.out.println("list = " + list.get(x)); //get 是获取每个元素* }*/public class LIstDemo_03 {public static void main(String[] args) {//创建集合对象List list = new ArrayList();//添加元素list.add("hello");list.add("world");list.add("java");//获取元素// System.out.println("list = "+ list.get(0));// System.out.println("list = " +list.get(1));// System.out.println("list = "+ list.get(2));// for (int x = 0; x < 3; x++) {// System.out.println("list = " + list.get(x));// }//获取集合长度sizefor (int x = 0; x < list.size(); x++) { //size可以获取集合长度System.out.println("list = " + list.get(x)); //get 是获取每个元素}}}
ListIterator
package cn.ListIterator;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;/*** List集合的特点:* 有序 (存储和输出的元素一致) 可重复* ListIterator listIterator() 列表迭代器* 该迭代器继承了Iterator迭代器,就可以直接使用hasNext()和next()方法** 逆向遍历* Object previous() //获取列表的上一个元素* 判断* boolean hasPrevious()判断列表上面是否还有元素** 注意:ListIterator 可以通过previous 进行逆向遍历,但是必须要先正向遍历,才能够逆向遍历(一般无意义,不使用)*** */public class ListIteratorDemo {public static void main(String[] args) {//创建集合对象List list = new ArrayList();//添加元素list.add("hello");list.add("world");list.add("java");//ListIterator listIteratorI() //返回子类对象ListIterator lis = list.listIterator();while(lis.hasNext()){String s = (String)lis.next();System.out.println(s);}System.out.println("---------------");// System.out.println(lis.previous());// System.out.println(lis.previous());// System.out.println(lis.previous());while(lis.hasPrevious()){//System.out.println(lis.previous());String s = (String)lis.previous();System.out.println("s = " + s);}System.out.println("-------------------");// Iterator it = list.iterator();// while (it.hasNext()) {// String s = (String) it.next();// System.out.println(s);// }//// System.out.println("-----------------------");}}
package cn.ListIterator;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;/*** 问题:有一个集合,判断里面是否有“world,如果就添加”javaee** ConcurrentModificationException: 当方法及测到对象的并发修改,但不允许这种修改时,抛出此异常* 产生的原因:* 迭代器是依赖集合而存在的,在判断成功后,集合添加了新的元素,而迭代器不知道,所以就报错,这个错交并发修改异常* 其实这个问题的描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的** 解决方式:* 1、迭代器迭代元素,迭代器修改元素* 元素是在迭代元素之后,* 2、集合遍历元素,集合修改元素(普通for)* 元素是在集合的最后面** */public class ListIteratorDemo_02 {public static void main(String[] args) {//创建List对象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();if("world".equals(s)){list.add("javaee");}}*//*//方式1:迭代器迭代元素,迭代器修改元素//Iterator 迭代器没有添加功能,所以只能使用子类接口ListIterator 中的添加功能ListIterator lit = list.listIterator();while(lit.hasNext()){String s = (String)lit.next();if("world".equals(s)){lit.add("javaee"); //这里是通过迭代器添加元素}}System.out.println("list = " + list);*///方式2:集合遍历元素,集合修改元素(普通for)for (int x = 0; x < list.size(); x++) {String s = (String) list.get(x);if ("world".equals(s)) {list.add("javaee");}}System.out.println("list = " + list);}}
数据结构:数据结构的组织方式。
面试题:常见的出具结构的优缺点?
栈:先进后出
入栈(压栈) A-B-C
出栈(弹栈) C-B-A
举例:
弹夹:存子弹,从上面压进,出去的的是从上面的先出
队列:先进先出
入栈(压栈) A-B-C
出栈(弹栈) A-B-C
举例:
买票,
数组:
存储同一类型的多个元素的容器,有索引,方便我们获取
链表:
由一个链子把多个节点连接起来的数据
节点:由数组和地址组成,(数据和指针域组成)
(数据就相当于数据,地址相当于指针域)

List的子类特点:
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vertor:
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
List怎么选择呢:
要安全吗?
要:vector(即是要安全也不使用)
不要:ArrayList 或者LinkedList
查询多:ArrayList:
增删多:LinkedList
如果什么都不会,那么就用ArrayList
//ClassCastException 类转换异常 这里要注意类型是否一致
package cn.Vector;import javax.swing.text.Element;import java.util.Enumeration;import java.util.Vector;/*** Vector的特有功能* 1、添加功能:* public void addElement(Object obd) ---add()* 2、获取功能:* public Object element(int index) ---get()* public Enumeration element() ---Iterator iterator* boolean hasMoreElement() ---haxNext()* Object nextElement() ---next()** jdk 升级的原因* 1、安全* 2、效率* 3、简写化** */public class VectorDemo {public static void main(String[] args) {//创建集合对象Vector v = new Vector();//添加元素v.addElement("hello");v.addElement("world");v.addElement("java");//遍历for(int x = 0; x<v.size();x++){String s = (String)v.elementAt(x);System.out.println("s = " + s);}System.out.println("----------------");// Enumeration en = v.elements();// while(en.hasMoreElements()){// String s = (String)en.nextElement();// System.out.println(s);// }for(int x = 0 ; x< v.size(); x++){String s = (String)v.elementAt(x);System.out.println("s = " + s);}}}
package cn.LinkedList;import java.util.LinkedList;/*** LinkedList的特有功能* 添加功能:* public void addFirst(Object e)* public void addLast(Object e)** 获取功能:* public Object getFirst()* public Object getLast()* 删除功能:* public Object removeFirst()* public Object removeLast()** */public class LinkedListDemo {public static void main(String[] args) {//创建集合对象LinkedList link = new LinkedList();//添加元素link.add("hello");link.add("world");link.add("java");//添加功能://link.addFirst("xixi"); //添加在第一个//link.addLast("haha"); //添加在最后一个//获取功能:// System.out.println(link.getFirst());// System.out.println(link.getLast());//删除功能:System.out.println(link.removeFirst());System.out.println(link.removeLast());//输出System.out.println("link = " + link);}}
package cn.Test;import java.util.ArrayList;import java.util.Iterator;/*** 去除集合中自定义对象对象的重复值(对象的成员变量值都想同)* contains()方法依赖的是equals ()方法,而学生类中没有equals()方法,默认使用的是父类的Object的equals()方法* 而Object()的equals()默认比较的是地址值,所以全部输出,因为全部 都是new出来的,地址值都不一样,所以全部不一样* 按照需求,比较成员变量,重写equals()方法。(自动生成)*** */public class ArrayListDemo_02 {public static void main(String[] args) {//创建集合对象:ArrayList array = new ArrayList();//创建学生对象:Student s1 = new Student("林青霞", 27);Student s2 = new Student("林志玲", 40);Student s3 = new Student("凤姐", 35);Student s4 = new Student("芙蓉姐姐", 18);Student s5 = new Student("翠花", 16);Student s6 = new Student("林青霞", 27);Student s7 = new Student("林青霞", 18);//添加元素array.add(s1);array.add(s2);array.add(s3);array.add(s4);array.add(s5);array.add(s6);array.add(s7);//创建新集合,ArrayList newArray = new ArrayList();//遍历旧集合,得到每一个元素Iterator it = array.iterator();while(it.hasNext()){Student s = (Student)it.next();//拿那个元素到新集合里面找,if(!newArray.contains(s)){newArray.add(s); //如果没有,就添加到新集合里面}}//遍历洗集合:for(int x = 0 ; x< newArray.size();x++){Student s = (Student)newArray.get(x);System.out.println(s.getName()+"---" +s.getAge());}}}
MyStack
package cn.LinkedList;import java.util.LinkedList;/*** 自定义栈集合* @author dengtonghu* @version 1.0** */fpublic class MyStack {private LinkedList link;//构造方法:public MyStack(){link = new LinkedList();}//添加功能:public void add(Object obj){link.addFirst(obj);}//获取功能public Object get(){//return link.getFirst(); //只能获取第一个return link.removeFirst(); //删除第一个并返回}//添加判断:public boolean isEmpty(){return link.isEmpty();}}
泛型:
优点:
1、把运行周期出现的问题提前到了编译期间
2、避免了强制类型转换
3、优化了程序设计,避免了黄色警告线
使用场景:
看API,如果类、接口、抽象类后面跟着有
package cn.Generic;import java.util.ArrayList;import java.util.Iterator;/*** ArrayList存储字符串并遍历** 程序出错:* 因为在存储的时候,储存了String类型和Integer 两种类型数据* 而在遍历的时候,我们都当做String 类型处理做转换,所以报错* 编译期间没有报错** 数组:* String[] strArray = new String[3];* strArray[0] = "hello";* strArray[1] = "world";* strArray[2] = 10; //这里就会报错,数据类型不一致,String 和int类型** 集合模仿数组的做法,在创建对象的时候明确元素的数据类型,这样就不会出问题了* 而这种技术就是 泛型** 泛型是一种特殊类型,是一种把类型明确的工作 推迟到创建对象或调用方法的时候 采取明确特殊的类型* 参数化类型把类型当做参数一样传递* 格式<数据类型> //此处的数据类型只能是引用类型***/public class GenericDemo {public static void main(String[] args) {//创建集合对象ArrayList<String> array = new ArrayList<String>();//添加元素array.add("hello");array.add("world");array.add("java");//array.add(new Integer(10));//array.add(10); //jdk5以后的自动装箱(自动装箱:把基本类型转为包装类类型.引用类型反之) 这里是引用类型,而其他是字符串类型//等价于:array.add(Integer.valueOf(10))//遍历Iterator<String> it = array.iterator();while(it.hasNext()){//String s =(String)it.next();String s = it.next(); //明确了数据类型就不需要强转System.out.println("s = " + s);}}}
//遍历的三种方式:
//遍历:Iterator<Student> it = array.iterator(); //迭代器while(it.hasNext()){Student s = it.next();System.out.println(s.getName()+"---"+ s.getAge());}System.out.println("----------------------");for(Iterator<Student> IT = array.iterator();IT.hasNext();){Student s = IT.next();System.out.println(s.getName()+"---"+s.getAge());}System.out.println("--------------------");for(int x= 0; x<array.size(); x++){ //普通for(size和get)Student s = array.get(x);System.out.println(s.getName()+"---"+s.getAge());}
实现类在实现接口的两种情况:
package cn.Genericity.Genericty_04;/*** 实现类在实现接口的时候有两种情况* 1、已经知道是什么类型* 2、不知道什么类型** *///public class InterImpl implements Inter<String>{////// @Override //不知道类型// public void show(String s) {// System.out.println("s = " + s);// }//}public class InterImpl<T> implements Inter<T>{@Override //知道类型public void show(T t) {System.out.println("t = " + t);}}
泛型高级之通配符
package cn.Genericity.Genericity_05;import java.util.ArrayList;import java.util.Collection;/*** ? :任意类型,如果没有明确,那么就是Object 以及任意java类* ? extends E :向下限定,E及其子类 ,不包括父类* ? super E :向上限定,E及其父类,** */public class GenericityDemo {public static void main(String [] args){Collection<Object> c1 = new ArrayList<Object>();//注意:泛型如果明确写的时候,前后必须一致// Collection<Object> c2 = new ArrayList<Animal>();// Collection<Object> c3 = new ArrayList<dog>();// Collection<Object> s4 = new ArrayList<cat>();//<?>表示任意类型都可以Collection<?> c5 = new ArrayList<Animal>();Collection<?> c6 = new ArrayList<dog>();Collection<?> c7 = new ArrayList<cat>();//? extends E :向下限定,E及其子类,不包括父类//Collection<? extends Animal> c8 = new ArrayList<Object>();Collection<? extends Animal> c9 = new ArrayList<Animal>();Collection<? extends Animal> c10 = new ArrayList<dog>();Collection<? extends Animal> c11 = new ArrayList<cat>();//?super E:向上限定:E及其父类Collection<? super Animal> c12 = new ArrayList<Object>();Collection<? super Animal> c13 = new ArrayList<Animal>();//Collection<? super Animal> s14 = new ArrayList<dog>();//Collection<? super Animal> c15 = new ArrayList<cat>();}//定义一个类:class Animal{}class dog extends Animal{}class cat extends Animal{}}
增强for
package cn.JDK5;import java.util.ArrayList;import java.util.List;/*** JDK5的新特性:* 自动拆装箱:* 自动装箱:把基本类型转为包装类类型* 自动拆箱:把包装类类型转为基本类型** 泛型:* 看API,如果类、接口、抽象类后面跟着有<E>,就说明要使用泛型,一般在集合中使用** 增强for:* 是for循环的一种* 格式:* for(元素的数据类型 变量: 数组或者Collection 集合){* 使用变量即可,给变量就是元素* }* 优点:简化了数组和集合的遍历* 弊端:增强for的目标不能我null* 解决:对增强for的目标先进行一个不为null的判断然后使用** 静态导入* 可变参数* 枚举***** */public class forDemo {public static void main(String[] args) {int[] arr = {1,2,3,4,5};for(int x = 0 ; x<arr.length; x++){System.out.print(arr[x]+" ");}System.out.print("\n"+"--------------------------"+"\n");//增强forfor(int x : arr){System.out.print(x+" ");}System.out.println("\n"+"---------------------------");//定义一个字符串数组String[] strArray = {"张三","李四","小明","小红"};for(String s : strArray){System.out.println(s);}//定义一个集合:ArrayList<String> array = new ArrayList<String>();array.add("hello");array.add("java");array.add("world");for(String s :array){System.out.println(s);}List<String> list = null; //NullPointerException控制针异常if(list!= null) {for (String s : list) {//这个s是我从list里面获取的,在获取之前做了一个判断,其实就是迭代器功能System.out.println(s);}}}}
package cn.JDK5;import java.util.ArrayList;import java.util.Iterator;/*** ArrayList 存储字符串并遍历(三种方式:迭代器,普通for,增强for)*/public class ForDemo_02 {public static void main(String[] args) {//创建集合:ArrayList<String> array = new ArrayList<String>();//创建并添加元素array.add("hello");array.add("world");array.add("java");//遍历:Iterator<String> it = array.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("--------------------------");for (Iterator<String> IT = array.iterator(); IT.hasNext(); ) {String s = IT.next();System.out.println(s);}System.out.println("---------------------");//普通fofor (int x = 0; x < array.size(); x++) {String s = array.get(x);System.out.println(s);}System.out.println("---------------------------");//增强for:for (String s : array) {System.out.println(s);}}}
增强for是用来替代迭代器
