JAVA 基础知识整理-12(集合类)Vector, LinkedList, 泛型,增强for循环

1. Vector 类

主要方法:

void addElement(E obj)
将指定的组件添加到此向量的末尾,且向量的大小加 1。
E elementAt(int index)
返回指定索引处的组件。
Enumeration elements()
返回此向量的组件的枚举。

Enumeration的主要方法:

boolean hasMoreElements()
测试此枚举是否包含更多的元素。
E nextElement()
如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

代码示例:

package testdemo;

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

public class ArrayListDemo {
	public static void main(String[] args) {
		Vector v = new Vector();
		Student s1 = new Student("jimm",20);
		Student s2 = new Student("linda",25);
		Student s3 = new Student("dotta",28);
		v.addElement(s1);
		v.addElement(s2);
		v.addElement(s3);
		System.out.println(v);
		System.out.println(v.elementAt(0));
		Enumeration e = v.elements();
		while(e.hasMoreElements()){
			System.out.println(e.nextElement());
		}
	
	}
}
输出:
[Student name=jimm, age=20, Student name=linda, age=25, Student name=dotta, age=28]
Student name=jimm, age=20
Student name=jimm, age=20
Student name=linda, age=25
Student name=dotta, age=28

2. LinkedList类

LinkedList特有的方法:

void addFirst(E o)
将给定元素插入此列表的开头。
void addLast(E o)
将给定元素追加到此列表的结尾。(这个方法跟集合通用的方法add()的使用差不多)
E getFirst()
返回此列表的第一个元素。
E getLast()
返回此列表的最后一个元素。
E removeFirst()
移除并返回此列表的第一个元素。
E removeLast()
移除并返回此列表的最后一个元素。

代码示例:

package testdemo;

import java.util.LinkedList;

public class LinkedListDemo {
	public static void main(String[] args) {
		LinkedList lkd = new LinkedList();
		Student s1 = new Student("jimm",20);
		Student s2 = new Student("linda",25);
		Student s3 = new Student("dotta",28);
		lkd.addFirst(s1);
		lkd.addFirst(s2);
		lkd.addFirst(s3);
		System.out.println(lkd);		
		System.out.println(lkd.getFirst());
		System.out.println(lkd.getLast());
		System.out.println(lkd.removeLast());
		System.out.println(lkd);
	}
}
输出:
[Student name=dotta, age=28, Student name=linda, age=25, Student name=jimm, age=20]
Student name=dotta, age=28
Student name=jimm, age=20
Student name=jimm, age=20
[Student name=dotta, age=28, Student name=linda, age=25]

ArrayList去重(选择排序法)

package testdemo;

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

public class RemoveDuplicateElement {
	public static void main(String[] args) {
		ArrayList arr0 = new ArrayList();
		arr0.add("hello");
		arr0.add("hello");
		arr0.add("hello");
		arr0.add("world");
		arr0.add("world");
		arr0.add("apple");
		arr0.add("apple");
		arr0.add("apple");
		for(int i = 0; i<arr0.size();i++){
			String cur = (String)arr0.get(i);
			for(int j = i+1; j<arr0.size();j++){
				String s = (String) arr0.get(j);
				if(s.equals(cur)){
					arr0.remove(s);
					j--;//删除元素之后,如果不做这一步就会漏掉对下一个元素的判断
				}				
			}

		}
		System.out.println(arr0);
	}
}

输出:
[hello, world, apple]

创建新数组的去重方案:

public static ArrayList deleteDuplic(ArrayList arr){
		ArrayList newArr = new ArrayList();
	for(int i = 0; i< arr.size();i++){
		String s = (String) arr.get(i);
		if(!newArr.contains(s)){
			newArr.add(s);			
		}
	}
	return newArr;
	}

对象数组去重(姓名相同且年龄相同就算重复):

public static ArrayList DeleteDupStu(ArrayList<Student> arr){
		
		ArrayList<Student> newArr = new ArrayList<Student>();
		for(int i = 0; i < arr.size();i++){
			Student s = arr.get(i);
			String name = s.getName();
			int age = s.getAge();
			boolean flag = true;
			for(int j = 0; j <newArr.size();j++){
				Student s1 = newArr.get(j);
				String name1 =s1.getName();
				int age1 = s1.getAge();
				if(name == name1 && age == age1){
					flag = false;
				}
			}
			if(flag){
				newArr.add(s);
			}
			
		}
		return newArr;
	}

用LinkedList实现栈(继承的方式)

package testdemo;

import java.util.LinkedList;

public class StackBasedOnLink extends LinkedList {

	public StackBasedOnLink() {
		super();
	}
	
	public void push(Object obj){
		this.addFirst(obj);
	}
	
	public Object pop(){
		return this.removeFirst();
	}
	
}
package testdemo;

public class StackBasedOnLinkedDemo {
	public static void main(String[] args) {
		StackBasedOnLink sbo = new StackBasedOnLink();
		sbo.push("Hello");
		System.out.println(sbo);
		sbo.push("Kathy");
		System.out.println(sbo);
		sbo.push("Do");
		System.out.println(sbo);
		sbo.push("you");
		System.out.println(sbo);
		sbo.push("like");
		System.out.println(sbo);
		sbo.push("Java");
		System.out.println(sbo);
		System.out.println("==============================");
		while(!sbo.isEmpty()){
			//System.out.println(std);
			System.out.println(sbo.pop());
			
		}
		
	}
}
output:
[Hello]
[Kathy, Hello]
[Do, Kathy, Hello]
[you, Do, Kathy, Hello]
[like, you, Do, Kathy, Hello]
[Java, like, you, Do, Kathy, Hello]
==============================
Java
like
you
Do
Kathy
Hello

用LinkedList实现栈(非继承的方式)

package testdemo;

import java.util.LinkedList;

public class StackLinked{
	private LinkedList lkd;
	public StackLinked() {
		lkd = new LinkedList();
	}
	
	public void push(Object obj){
		lkd.addFirst(obj);
	}
	
	public Object pop(){		
		Object obj = lkd.getFirst();
		lkd.removeFirst();	
		return obj;
	}
	
	public boolean isEmpty(){
		return lkd.isEmpty();
	}

	@Override
	public String toString() {
		return  ""+lkd+"";
	}
		
}

package testdemo;

public class StackLinkedDemo {
	public static void main(String[] args) {
		StackLinked std = new StackLinked();
		std.push("Hello");
		System.out.println(std);
		std.push("Kathy");
		System.out.println(std);
		std.push("Do");
		System.out.println(std);
		std.push("you");
		System.out.println(std);
		std.push("like");
		System.out.println(std);
		std.push("Java");
		System.out.println(std);
		System.out.println("==============================");
		while(!std.isEmpty()){
			//System.out.println(std);
			System.out.println(std.pop());
			
		}
		
	}
}
output:
[Hello]
[Kathy, Hello]
[Do, Kathy, Hello]
[you, Do, Kathy, Hello]
[like, you, Do, Kathy, Hello]
[Java, like, you, Do, Kathy, Hello]
==============================
Java
like
you
Do
Kathy
Hello

3. 泛型类,泛型方法,泛型接口

泛型类,泛型方法

package testdemo;

class Calculate{
	public void show(String s){
		System.out.println(s);
	}
	
	public void show(Integer s){
		System.out.println(s);
	}
	
	public void show(Boolean s){
		System.out.println(s);
	}
}

class Calculate1<T>{
	private T obj;

	public Calculate1(T obj) {
		super();
		this.obj = obj;
	}

	public T getObj() {
		return obj;
	}

	public void setObj(T obj) {
		this.obj = obj;
	}
	
}

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

public class FanXinDemo {
	public static void main(String[] args) {
		//一般重载
		Calculate c = new Calculate();
		c.show("hello");
		c.show(100);
		c.show(true);
		System.out.println("============================================");
		//泛型类
		Calculate1<String> cs = new Calculate1<>("hello");
		System.out.println(cs.getObj());
		Calculate1<Integer> cs1 = new Calculate1<>(100);
		System.out.println(cs1.getObj());
		Calculate1<Boolean> cs2 = new Calculate1<>(true);
		System.out.println(cs2.getObj());
		System.out.println("============================================");
		//泛型方法
		Calculate2 ce = new Calculate2();
		ce.show("hello");
		ce.show(true);
		ce.show(100);
	}
}

泛型接口

package testdemo;

interface Cal<T> {
	void show(T t);
}

class Calculator implements Cal{
	@Override
	public void show(Object t) {
		System.out.println(t);		
	}	
}

public class FanXinInterface {
	public static void main(String[] args) {
		Cal<String> c= new Calculator();
		c.show("Hello");
		Cal<Boolean> c1= new Calculator();
		c1.show(true);
	}
}

4. 泛型通配符
<?>:任意类型,如果没有明确,那么就是object类型和任意JAVA类型(如果明确写,那么左右要一致,比如:Collection ca = new ArrayList();)
<? extends E>:向下限定E以及其子类
<? super E>:向上限定E以及其父类

package testdemo;

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

public class FanxinSymbols {
	public static void main(String[] args) {
		Collection<Animal> ca = new ArrayList<Animal>();
		Collection<?> c = new ArrayList<Animal>();
		Collection<?> c1 = new ArrayList<Cat>();
		Collection<?> c2 = new ArrayList<Dog>();
		
		Collection<? extends Animal> c3 = new ArrayList<Animal>();
		Collection<? extends Animal> c4 = new ArrayList<Cat>();
		Collection<? extends Animal> c5 = new ArrayList<Dog>();
		
		Collection<? super Animal> c6 = new ArrayList<Animal>();
		Collection<? super Animal> c7 = new ArrayList<Object>();
	}
}
class Animal{
	
}
class Cat extends Animal{
	
}
class Dog extends Animal{
	
}

5. 增强for循环

JDK5之后为了方便集合的遍历而出现的,可以方便的遍历集合和数组。底层是迭代器(因此要注意,涉及到集合修改时,不要使用集合修改)

格式:
for(元素类型 变量(元素):数组或Collection集合){
}

6. 静态导入
可以直接导入到方法级别

格式:
import static 包名…类名.方法名

7. 可变参数

如果定义方法的时候不知道该定义多少个参数,那么就可以用可变参数来接收。

格式:

修饰符 返回值类型 方法名(数据类型… 变量名){
}

注:
1)这里的变量其实是一个数组
2)如果有一个方法有可变参数,并且有多个可变参数,那么可变参数肯定是最后一个。
案例:
键盘录入多个数据,以0结束,要求在控制台输出这个数据中的最大值。

public class ChangableParaDemo {
	public static void main(String[] args) {
		findMax(2,3,6,7,10);
	}
	
	public static void findMax(int...is ){
		int sum = 0;
		for(int x: is){
			sum += x;
		}
		System.out.println(sum);
	}
}
package practicedemo;

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

public class FindMax {
	public static void main(String[] args) {
		//键盘录入多个数据,以0结束,要求在控制台输出这个数据中的最大值。
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入数字,退出请输入0");
		ArrayList<Integer> c = new ArrayList<Integer>();
		int a = sc.nextInt();
		do{
			c.add(a);
			a = sc.nextInt();
		}while(a!=0);
		
		FindMax(c);
	}
	
	
	public static void FindMax(ArrayList<Integer> c){
		if(c.size()!=0){
			Integer max = c.get(0);
			for(int i = 1; i <c.size();i++){				
				Integer cur = c.get(i);
				if(cur>max){
					max =cur;					
				}
			}
			System.out.println(c);
			System.out.println(max);
		}
		
	}
}

注:两个Integer比较时,实际比较的是xx.intValue()
用反编译软件可以看出来。
以下是反编译的代码:

package practicedemo;

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;

public class FindMax
{

	public FindMax()
	{
	}

	public static void main(String args[])
	{
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入数字,退出请输入0");
		ArrayList c = new ArrayList();
		int a = sc.nextInt();
		do
		{
			c.add(Integer.valueOf(a));
			a = sc.nextInt();
		} while (a != 0);
		FindMax(c);
	}

	public static void FindMax(ArrayList c)
	{
		if (c.size() != 0)
		{
			Integer max = (Integer)c.get(0);
			for (int i = 1; i < c.size(); i++)
			{
				Integer cur = (Integer)c.get(i);
				if (cur.intValue() > max.intValue())
					max = cur;
			}

			System.out.println(c);
			System.out.println(max);
		}
	}
}

8. ArrayList的toString()方法

toString()方法存在于其继承的父类的父类AbstractCollection中。

public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {//for (;;)跟while(true)差不多
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);//如果e元素就是本类name就添加 "(this Collection)"如果不是就添加e元素
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }
发布了55 篇原创文章 · 获赞 0 · 访问量 2068

猜你喜欢

转载自blog.csdn.net/KathyLJQ/article/details/104739891