List的子实现类ArrayList,Vector及LinkedLifst ,泛型

ArrayList:

ArrayList是List接口中常用的一个子实现类:

 常用的遍历功能有:

    1.Collection接口的获取迭代器方法   Iterator iterator()

   2.List接口的获取列表迭代器方法    ListIterator  listIterator()

  3.ArrayList类的方法  int size()与 Object get(int index)普通for循环

package org.westos.ArrayList;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class ArrayListDemo1 {
public static void main(String[] args) {
	ArrayList<String> al=new ArrayList<String>();
	al.add("asdf");
	al.add("qwer");
	al.add("zxcv");
	al.add("uiop");
	//使用迭代器对集合进行遍历
	Iterator<String> it=al.iterator();
	while(it.hasNext()) {
		String str=it.next();
		System.out.println(str);
	}
	//使用size(),get(int index)方法
	for(int i=0;i<al.size();i++)
		System.out.println(al.get(i));
	//使用列表迭代器对集合进行遍历
	ListIterator<String> li=al.listIterator();
	while(li.hasNext()) {
		System.out.println(li.next());
	}
	
}
}

Vector:

Vector集合:

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

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

 特有功能:

   public void addElement(Object obj)------->add(Object obj)
   public Enumeration elements():返回此向量的枚举--->相当于:public Iterator iterator()
   boolean hasMoreElements()  --->boolean hasNext() ;
   Object nextElement()   --->Object next() ;

package org.westos.Vector;

import java.util.Enumeration;
import java.util.Vector;

public class VectorDemo1 {
	public static void main(String[] args) {
		// 创建Vector对象
		Vector<String> v = new Vector<String>();
		v.addElement("qwer");// 添加元素
		v.addElement("asdf");
		v.addElement("zxcv");
		// 遍历元素
		// 返回此向量的枚举
		Enumeration<String> em = v.elements();
		while (em.hasMoreElements())
			System.out.println(em.nextElement());
	}

}

LinkedList:

LinkedList集合的特点:
  底层是一种链表实现,查询慢,增删快
  线程不安全的,不同步,执行效率高
LinkedList集合的特有功能:
  添加功能
  addFirst(Object e):将指定的元素插入到列表的开头
  addLast(object e):将指定的元素添加到列表末尾
  获取功能:
          getFirst():获取列表第一个元素
  getLast():获取列表最后一个元素
 
  删除功能
  public Object removeFirst()删除并返回此列表的第一个元素。
  public Object removeLast()删除并返回列表最后一个元素

package org.westos.LinkedList;

import java.util.LinkedList;

public class LinkedListDemo {
public static void main(String[] args) {
	LinkedList<String> ll=new LinkedList<String>();
	ll.addFirst("asdf");//在列表首位添加元素
	ll.addFirst("qwer");
	ll.addFirst("zxcv");
	ll.addFirst("ghjkl");
	ll.addLast("bnm");//在列表末尾添加元素
	System.out.println(ll.getFirst());//获取列表第一个元素
	System.out.println(ll.getLast());//获取列表最后一个元素
	System.out.println(ll.removeLast());//删除并返回列表最后一个元素
	System.out.println(ll.removeFirst());//删除并返回列表第一个元素
	System.out.println(ll.removeFirst());
}
}

自定义一个栈集合类MyStack:

  创建该集合对象并调用LinkedList的特有功能:

package org.westos.LinkedList;

import java.util.LinkedList;



public class MyStack {
private LinkedList<String> ll;
public MyStack() {
	ll=new LinkedList<String>();//创建LinkedList对象
}
//添加
public void addFirst(String str) {
	ll.addFirst(str);
}
//获取
public String getFirst() {
	 return ll.getFirst();
}
//删除
public String removeFirst() {
	return ll.removeFirst();
}
}
package org.westos.LinkedList;

public class MyStackDemo {
public static void main(String[] args) {
	//创建MyStack对象
	MyStack ms=new MyStack();
	//添加元素
	ms.addFirst("qwer");
	ms.addFirst("asdf");
	ms.addFirst("zxcv");
	System.out.println(ms.getFirst());
	System.out.println(ms.removeFirst());
	System.out.println(ms.getFirst());
}
}

需求:给集合中添加重复的元素(字符串类型),将重复的元素从集合去除掉!

package org.westos.Test;

public class Student {
private String name;
private int age;
public Student() {
	super();
	// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}

public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
@Override
public String toString() {
	return "Student [name=" + name + ", age=" + age + "]";
}

public boolean equals(Student obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Student other = (Student) obj;
	if (age != other.age)
		return false;
	if (name == null) {
		if (other.name != null)
			return false;
	} else if (!name.equals(other.name))
		return false;
	return true;
}

}
package org.westos.Test;

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

public class ArrayListDemo {
public static void main(String[] args) {
	ArrayList<Student> list=new ArrayList<Student>();
	Student s1=new Student("林俊杰",36);
	Student s2=new Student("周杰伦",40);
	Student s3=new Student("谢春花",25);
	Student s4=new Student("莫文蔚",36);
	Student s5=new Student("王菲",46);
	Student s6=new Student("林俊杰",36);
	Student s7=new Student("周杰伦",40);
	Student s8=new Student("谢春花",25);
	Student s9=new Student("莫文蔚",36);
	Student s10=new Student("王菲",46);

	list.add(s1);
	list.add(s2);
	list.add(s3);
	list.add(s4);
	list.add(s5);
	list.add(s6);
	list.add(s7);
	list.add(s8);
	list.add(s9);
	list.add(s10);
	//第一种方式
	ArrayList<Student> list2=new ArrayList<Student>();
	Iterator<Student> it=list.iterator();
	while(it.hasNext()) {
		if(!list2.contains(it.next()))
			list2.add(it.next());
	}
	Iterator<Student> it2=list2.iterator();
	while(it2.hasNext())
		System.out.println(it2.next());
	System.out.println("-------------");

    //第二种方式
    for(int x=0;x<list.size()-1;x++) 
    	for(int y=x+1;y<list.size();y++) {
    		if(list.get(x).equals(list.get(y))) {
    			list.remove(y);
    		    y--;
    		}
    	}
    
   Iterator<Student> it3=list.iterator();
	while(it3.hasNext())
		System.out.println(it3.next());

}
}

泛型:

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

 泛型的好处:

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

        2.避免了强制类型转换

        3.优化了设计,解决了黄色警告线问题

 泛型的引出保证了程序的安全性

package org.westos.ArrayList;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class ArrayListDemo1 {
public static void main(String[] args) {
	ArrayList<String> al=new ArrayList<String>();
	al.add("asdf");
	al.add("qwer");
	al.add("zxcv");
	al.add("uiop");
	//使用迭代器对集合进行遍历
	Iterator<String> it=al.iterator();
	while(it.hasNext()) {
		String str=it.next();//避免了强制类型转换
		System.out.println(str);
	}
}
}

把泛型定义在类上,提高了程序的安全性

解决了向下强制类型转换出现的问题:ClassCastException

package org.westos.泛型;

public class ObjectTool<T> {
private T obj;
public void set(T obj) {
	this.obj=obj;
}
public T get() {
	return obj;
}

}
package org.westos.泛型;

public class ObjectToolDemo {
public static void main(String[] args) {
	ObjectTool<String> ot=new ObjectTool<String>();
	ot.set("asdd");
	String str=ot.get();
	//Integer i=ot.get();//创建对象时已经限定了获取值的类型为String类型
	ObjectTool<Integer> ot2=new ObjectTool<Integer>();
	ot2.set(new Integer(23));
	Integer i=ot2.get();
}
}

可以将泛型不定义在类上,将泛型定义在类中方法上(该类没有定义成员变量的情况下)

package org.westos.泛型;

public class ObjectTool2 {
public<T> void show(T t) {
	System.out.println(t);
}
}


package org.westos.泛型;

public class ObjectToolDemo2 {
public static void main(String[] args) {
	ObjectTool2 ot=new ObjectTool2();
	ot.show(new Integer(23));
	ot.show("asdf");
	
}
}

将泛型定义在接口上

package org.westos.泛型;

public interface Inter<T> {
//定义一个成员方法
	public abstract void show(T t1,T t2);
	
}
package org.westos.泛型;
/*//第一种方式,给该接口Inter的子实现类也定义泛型
public class InterImpl<T> implements Inter<T> {

	@Override
	public void show(T t1,T t2) {
		// TODO Auto-generated method stub
		System.out.println(t1.equals(t2));
	}
	}*/
//第二种方式,给该接口指定泛型的数据类型
public class InterImpl implements Inter<Integer> {


	@Override
	public void show(Integer t1, Integer t2) {
		// TODO Auto-generated method stub
		System.out.println(t1+t2);
	}
}	
 

package org.westos.泛型;
//第一种方式
/*public class InterImplDemo {
public static void main(String[] args) {
	Inter<String> i=new InterImpl<String>();
	i.show("asdf","qwer");
}
}*/
//第二种方式
public class InterImplDemo {
public static void main(String[] args) {
	Inter<Integer> i=new InterImpl();
	i.show(23,55);
}
}

泛型高级(通配符)

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

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

 <? super E>:向上限定,E及E的父类
package org.westos.泛型;

import java.util.ArrayList;

public class GenericDemo {
	public static void main(String[] args) {
		ArrayList<?> list = new ArrayList<Object>();
		ArrayList<?> list2 = new ArrayList<String>();
		ArrayList<?> list3 = new ArrayList<Integer>();
		System.out.println("------");
		ArrayList<? extends Object> list4 = new ArrayList<String>();
		// ArrayList<? extends String> list5=newArrayList<Integer>();//Integer不是String的子类会报错
		ArrayList<? extends Object> list6 = new ArrayList<Integer>();
		System.out.println("-------");
		ArrayList<? super Integer> list7 = new ArrayList<Object>();
		ArrayList<? super String> list8 = new ArrayList<Object>();
		ArrayList<? super String> list9 = new ArrayList<String>();

	}
}












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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值