Java-List类

List类

List集合的子实现类的特点:

ArrayList:

底层数据结构是数组的形式,满足数组结构的特点:查询快,增删慢.

从线程安全问题来看:线程不安全的,不同步,执行效率高.

由于ArrayList是List集合的自实现类,它元素可以重复,并且存储和取出一致.

Vector:

底层数据结构是数组的形式,查询快,增删慢.

从线程角度看:线程安全的类,同步,执行效率低.

特有功能:

public void addElement(E obj)------->相当于:add(Object e)

public Enumeration elements()----->相当于:Iterator iterator() ;

Enumeration接口:向量的组件枚举有两个方法

boolean hasMoreElements():------>相当于:hasNext()

Object nextElement():----------->相当于:next();

public class VectorDemo {
	public static void main(String[] args) {
		Vector v=new Vector();
		v.addElement("I");
		v.addElement("Love");
		v.addElement("立华奏");
		//遍历
		Enumeration en=v.elements();
		while(en.hasMoreElements()){
			String s=(String)en.nextElement();
			System.out.println(s);
		}
	}
}

LinkedList:

底层数据结构是链接列表,特点:查询慢,增删快.

从线程角度看:线程不安全的一个类,不同步,执行效率高.

特有功能:

添加功能:

public void addFirst(E e)将指定元素插入此列表的开头。

public void addLast(E e)将指定元素添加到此列表的结尾。

获取功能:

public Object getFirst()返回此列表的第一个元素

public Object getLast()返回此列表的最后一个元素。

删除功能:

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

public Object removeLast()移除并返回此列表的最后一个元素。

import java.util.LinkedList;

public class LinkedListDemo {
	public static void main(String[] args) {
		LinkedList list=new LinkedList();
		//将指定元素插入此列表的开头
		list.addFirst("I");
		list.addFirst("Love");
		list.addFirst("立华奏");
		System.out.println(list);
		System.out.println("---------");
		//获取功能
		System.out.println(list.getFirst());
		System.out.println(list.getLast());
		System.out.println("---------");
		//删除功能
		list.removeFirst();
		list.removeLast();
		System.out.println(list);
	}
}

结果为:

[立华奏, Love, I]
---------
立华奏
I
---------
[Love]

LinkedList模拟一个栈结构的特点.

表达的意思:自定义栈集合类,然后使用LinkedList的一些特有功能模拟栈结构特点.LinkedList集合的特有功能:addFirst(Object e) 栈结构的特点:先进后出.

如果实现多线程程序,一般要是安全的类:StringBuffer,Vector,hashtable.

如果在一般的需求中没有指明使用集合去完成,都默认采用ArrayList.如果需求中要考虑线程安全,那么使用Vector集合!

笔试过程中,一些需求用到集合:就是用ArrayList.

泛型:把数据类型的明确工作提供提前到了创建对象或者是调用方法的时期明确的一种特殊类型.参数化类型,可以像参数一样进行传递

格式:

<引用类型>:泛型只能放引用类型.

泛型好处:

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

2)解决了黄色警告线问题

3)获取数据的时候,不用强制类型转换了

泛型的高级:通配符

:可以是任意类型,包括Object类型以及任意的Java类

:向下限定,E类型以及E类型的子类

:向上限定,E类型以及E类型的父类

相关代码:

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

public class GenericDemo {
	public static void main(String[] args) {
		//前后类型保持一样
		Collection c=new ArrayList() ;
		//:可以是任意类型,包括Object类型以及任意的Java类
		Collection c1=new ArrayList();
		Collection c2=new ArrayList();
		Collection c3=new ArrayList();
		//:向下限定,E类型以及E类型的子类
		Collection c4=new ArrayList();
		Collection c5=new ArrayList();
		Collection c6=new ArrayList();
		//:向上限定,E类型以及E类型的父类
		Collection c7=new ArrayList();
		Collection c8=new ArrayList();
	}
}
class Animal{
	
}
class cat extends Animal{
	
}
 
  增强for循环: 
  

书写格式:

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

输出变量名;

}

增强for循环的弊端:

遍历数组或者集合的时候,数组对象或者集合对象不能为null

如果对象为空,一般加上非空判断

增强for循环的出现就是为了替代迭代器遍历集合的,以后开发中就是用增强for遍历元素.

相关代码:

import java.util.ArrayList;


public class forDemo {
	
	public static void main(String[] args) {
		
		//定义一个数组,静态初始化
		int[] arr = {11,22,33,44,55} ;
		
		//普通for循环的遍历
		for(int x = 0 ; x < arr.length ; x ++){
			System.out.println(arr[x]);
		}
		
		System.out.println("-------------------");
		
		//使用增强for遍历
		for(int i :arr){
			System.out.println(i);
		}
		
		System.out.println("-------------------");
		
		//定义一个字符串数组,并遍历
		String[] strArray = {"hello","world","java"};
		//直接使用增强for循环
		for(String s : strArray){
			System.out.println(s);
		}
		System.out.println("-------------------");
		//创建ArrayList集合对象,添加并遍历元素
		ArrayList array = new ArrayList() ;
		//添加元素
		array.add("hello") ;
		array.add("world") ;
		array.add("java") ;
	
		//使用增强for遍历该集合
		for(String s :array){
			//获取到每一个元素
			//java.util.ConcurrentModificationException
			////判断当前集合中是否有"world",如果有就添加元素
			if("world".equals(s)){
				array.add("javaee") ;
			}
		}
		
		System.out.println("-------------------");
		
		/*	array = null ;
		//java.lang.NullPointerException:空指针异常
		if(array!=null){
			//增强for循环
			for(String s:array){
				System.out.println(s);
			}
		}*/
	}
}




你可能感兴趣的:(Java-List类)