day13--ArrayList/LinkedList/Vector集合/泛型(Generic)/Jdk5以后的新特性

1List

1ArrayListList接口中常用的一个子实现类

 

  遍历功能:

  1)一个是Collectioniterator()

  2)size()get(int index)普通for循环

 掌握:存储字符串并遍历元素、存储自定义对象并遍历元素

 

1:用ArrayList模拟栈的先进后出

2:去除重复元素(建立新集合;不建立新集合)

 

2LinkedList集合的特点:

  底层是一种链表实现,查询慢,增删快

线程不安全的,不同步,执行效率高

 

 特有功能:

  添加功能

  addFirst(Object e):将指定的元素插入到列表的开头

  addLast(object e):将指定的元素添加到列表末尾

  获取功能:

  getFirst():获取列表第一个元素

  getLast():获取列表第二个元素

 

  删除功能

  public Object removeFirst()移除并返回此列表的第一个元素。

  public Object removeLast()   //返回移除的第一个或者最后一个元素

2Vector集合

   底层是一种可增长对象数组,查询快,增删慢

   线程安全,同步,执行效率低

  

  特有功能:

   public void addElement(Object obj)------->add(Object obj)

  public Enumeration elements():返回此向量的枚举--->相当于:public Iterator iterator()

   boolean hasMoreElements()  --->boolean hasNext() ;

    Object nextElement()   --->Object next() ;

代码如下:

//创建集合对象
		Vector v = new Vector() ;
		
		//添加元素
		v.addElement("hello"); 
		v.addElement("world");
		v.addElement("java");
		
		//遍历
		//获取Enumeration :向量的枚举
		Enumeration en = v.elements() ;
		while(en.hasMoreElements()) {
			String s = (String)en.nextElement() ;
			System.out.println(s);

1、泛型(Generic--->引用类型

泛型:将明确的集合类型的工作推迟到了创建对象或者调用方法的时候,属于一种参数化类型,可以作为参数传递.

 泛型的好处:

  1)将运行时期异常提前到了编译时期

  2)优化了设计,解决了黄色警告线问题

  3)避免了强制类型转换

 泛型的引出可以提供程序的安全性!

泛型可用在接口中,类中,方法上,在集合中应用最多!

l 把泛型定义在类上,提高程序安全性解决了向下类型转换出现的问题:ClassCastException

l 泛型通配符:泛型高级(通配符)

      <?> :代表任意类型Object类型,或者任意的Java

      <? extends E>:向下限定,E的子类或者E这个类型

<? super E>:向上限定,E及其他的父类

 

2Jdk5以后的新特性:

   增强for,静态导入,可变参数,泛型,自动拆装箱...

  (1)增强for循环的格式

   for(数据大类型  变量名 : 数组或者集合对象名){

   输出变量即可!

   }

  

     增强for的出现时替代迭代器的,所以在遍历集合或者遍历数组就可以使用增强for去完成

     增强for循环的弊端:如果集合的对象是null,如果再次对集合操作,就会出现异常

   对集合进行判断,非空判断解决

(2)静态导入:Jdk5一个新特性

  特点:(1)前提是该方法必须是静态的

       (2)导入到的一个方法的级别

 静态导入的格式:import static 包名.类名.方法名;

 import static java.util.ArrayList.add;   方法必须是静态方法

 常用类中哪个类中静态方法最多:Math

 之前导包:java.util.Scanner;   导入到类的级别

 (3)可变参数:当一个方法的参数个数不确定的时候,要使用可变参数

格式:修饰符 返回值类型  方法名(数据类型...变量名){...}

    注意:(1)变量名:看成一个数组

      (2)使用的时候数据类型...

    注意:根据具体的需求去完成,一般情况,知道有这个特性就可以了

 源码片段如下:
 
 
/** * ArrayList父类中的toString()的源码 * * public String toString() { Iterator<E> it = iterator(); //this.iterator(); if (! it.hasNext()) //迭代器遍历,如果没有元素可以迭代,返回"[]" return "[]"; StringBuilder sb = new StringBuilder(); //构造了字符串缓冲区对象 sb.append('['); //[ for (;;) { E e = it.next(); sb.append(e == this ? "(this Collection)" : e); if (! it.hasNext()){ return sb.append(']').toString(); //取到集合中的最后一个元素拼接右"]"将元素转换String }else{ sb.append(',').append(' '); } } }*/
针对数组操作的工具类:Arrays,提供了一个方法:

 public static <T> List<T> asList(T... a) :将数组转换成固定大小的集合

ArrayList集合存储自定义对象并遍历,有几种方式?

 * Iterator iterator() ;

 * listIterator listiterator();(可以不写)

 * 普通for循环:size()/get(int index)

 * 增强for循环

猜你喜欢

转载自blog.csdn.net/liuxiaofan_/article/details/80256962