1031泛型,集合

泛型

引入泛型

定义:使用泛型可以指代任意对象类型;

package com.java1234.chap06.sec01;
//CC的对象可以是任意类型
public class Test1 {

	public static void main(String[] args) {
	      // begin test CC
		CC<Integer> cc=new CC<Integer>(1);
		cc.print();
		int icc=cc.getOb();
		System.out.println("icc="+icc);
		
		CC<String> cc2=new CC<String>("我是泛型,好简单啊");
		cc2.print();
		String icc2=cc2.getOb();
		System.out.println("icc2="+icc2);
		// end test CC
	}
}

限制泛型

限制为Anmial类的泛型

package com.java1234.chap06.yun06;
/**
 *  限制类型
 * @author Administrator
 *
 * @param <T>
 */
public class Demo <T extends Animal>{ //限制为Anmial类
	private T ob;

	public T getOb() {
		return ob;
	}

	public void setOb(T ob) {
		this.ob = ob;
	}

	public Demo(T ob) {
		super();
		this.ob = ob;
	}
	
	public void print() {
		System.out.println("T的类型是"+ob.getClass().getName());
	}
}

通配符泛型

package com.java1234.chap06.yun7;

import com.java1234.chap06.yun06.Animal;
import com.java1234.chap06.yun06.Cat;
import com.java1234.chap06.yun06.Demo;
import com.java1234.chap06.yun06.Dog;

public class Test {
	
	private static void take(Demo<?> a) {
		a.print();
		
	}
	/**
	 * 通配符泛型<?>
	 * @param args
	 */
	
	
	public static void main(String[] args) {
	
		Demo<Dog> dog=new Demo<Dog>(new Dog());
		take(dog);
		
		Demo<Cat> cat=new Demo<Cat>(new Cat());
		take(cat);
		
		Demo<Animal> anmial=new Demo<Animal>(new Animal());
		take(anmial);
		}

	
	
}

泛型方法

package com.java1234.chap06.yun08;

public class Test {
	public static <T> void f(T t) {
		System.out.println("T的类型是:"+t.getClass().getName());	
	}
	
	public static void main(String[] args) {
		f(" ");
		f(1);
		f(1.0);
		f(new Object());
	}
}

java集合

Java集合的引入


public class Demo {
	
	
	public static void main(String[] args) {
		//用数组定义三个学生
		Student student[]=new Student[3];
		Student s1=new Student("张三", 1);
		Student s2=new Student("minm", 1);
		Student s3=new Student("张三2", 2);
		
		//集合,用链表
		LinkedList<Student> list=new LinkedList<Student>();
		list.add(s1);
		list.add(s2);
		list.add(s3);
		
		//遍历集合,(回去看数据结构)
		for(int i=0;i<list.size();i++)
		{
			Student s=list.get(i);
			
			System.out.println(s.getName()+":"+s.getAge());
		}
	
	}

}

List集合

  • 是 Collection 接口的子接口,也是最常用的接口。此接口对 Collection 接口进行了大量的扩展,List 集合里的元素是允许重复的。
  • collection去jdkAPI上看
  • List所有实现类AbstractList , AbstractSequentialList , ArrayList , AttributeList , CopyOnWriteArrayList , LinkedList , RoleList , RoleUnresolvedList , Stack , Vector
ArrayList
package com.java1234.chap07.yun2;

import java.util.ArrayList;

public class TestArrayList {
	private static void printArrayList (ArrayList<String> arrayList) {
		System.out.println("当前的集合元素:");
		for(int i=0;i<arrayList.size();i++) {
			System.out.println(arrayList.get(i)+" ");
		}
		System.out.println();
			
	}
	
	public static void main(String[] args) {
		ArrayList<String> arrayList=new ArrayList<String>();
	//添加元素
		arrayList.add("雨杰");
		arrayList.add("学云");
	printArrayList(arrayList);
	
	//将指定元素插入此列表的指定位置
	arrayList.add(1,"小雨杰");
	printArrayList(arrayList);
	
	//用指定的元素替换此列表中指定位置的元素
	arrayList.set(2,"小学云");
	printArrayList(arrayList);
	
	//删除该列表中指定位置的元素。 
	arrayList.remove(0);
	printArrayList(arrayList);
        }

}

研究链表数据结构
实验ArrayList其他方法

LinkeList

这个更强大一点,ArrayList有的它都有

package com.java1234.chap07.yun2;

import java.util.LinkedList;

public class TestLinkedList {
	//打印
	private static void printLinkedList(LinkedList<String> linkedList) {
		System.out.println("当前的集合元素:");
		for(int i=0;i<linkedList.size();i++) {
			System.out.println(linkedList.get(i)+" ");
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		LinkedList<String> linkedList=new LinkedList<String>();
		linkedList.add("张三");
		linkedList.add("李四");
		linkedList.add("王五");
		linkedList.add("赵六");
		linkedList.add("赵柒");
		
		printLinkedList(linkedList);
		
		//返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 
		System.out.println(linkedList.indexOf("李四"));
		printLinkedList(linkedList);//列表没有杯改变
		//检索但不删除此列表的第一个元素,如果此列表为空,则返回 null
		System.out.println(linkedList.peekFirst());
		printLinkedList(linkedList);
		//检索但不删除此列表的最后一个元素,如果此列表为空,则返回 null
		System.out.println(linkedList.peekLast());
		printLinkedList(linkedList);
		//检索并删除此列表的第一个元素,如果此列表为空,则返回 null
		System.out.println(linkedList.pollFirst());
		printLinkedList(linkedList);
		
	}
	
}

集合的遍历

掌握核心,东西是学不完的

Iterator 2
package com.java1234.chap07.yun3;

import java.awt.List;
import java.util.Iterator;
import java.util.LinkedList;

import com.java1234.chap07.yun1.Student;

public class TestIterator {
	
	public static void main(String[] args) {
		LinkedList<Student> list=new LinkedList<Student>();
		list.add(new Student("张三",10));
		list.add(new Student("李四",20));
		list.add(new Student("王五",30));
		
		/**
		 * 用Iterator遍历集合
		 */
		Iterator<Student> it=list.iterator();  //返回一个迭代器
		while (it.hasNext()) {
			Student s=it.next();
			System.out.println("姓名"+s.getName()+"年龄:"+s.getAge());
			
		}
	}
}

foreach
package com.java1234.chap07.yun3;

import java.util.LinkedList;

import com.java1234.chap07.sec01.Student;

public class TestForeach {

	public static void main(String[] args) {
		LinkedList<Student> list=new LinkedList<Student>();
		list.add(new Student("张三",10));
		list.add(new Student("李四",20));
		list.add(new Student("王五",30));
		
		/**
		 * 用foreach遍历
		 */
		for(Student s:list){
			System.out.println("姓名:"+s.getName()+"年龄:"+s.getAge());
		}
	}
}

Set集合

是 Collection 接口的子接口,没有对 Collection 接口进行扩展,里面不允许存重复的内容

package com.java1234.chap07.sec04;

import java.util.HashSet;
import java.util.Iterator;

public class TestHashSet {

	public static void main(String[] args) {
		/**
		 * 1,HashSet是无序
		 * 2,不循序有重复的值
		 */
		HashSet<String> hs=new HashSet<String>();
		hs.add("1");
		hs.add("2");
		hs.add("3");
		hs.add("4");
		hs.add("3");
		
		/**
		 * 用Iterator遍历集合
		 */
		Iterator<String> it=hs.iterator();
		while(it.hasNext()){
			String s=it.next();
			System.out.println(s+" ");
		}
	}
}

Map集合

是存放一对值的最大接口,即接口中的每一个元素都是一对,以 key->value 键值对的形式保存

package com.java1234.chap07.sec05;

import java.util.HashMap;
import java.util.Iterator;

import com.java1234.chap07.sec01.Student;

public class TestHashMap {

	public static void main(String[] args) {
		HashMap<String,Student> hashMap=new HashMap<String,Student>();
		hashMap.put("1号", new Student("张三",10));
		hashMap.put("2号", new Student("李四",20));
		hashMap.put("3号", new Student("王五",30));
		
		// 通过key,获取value
		Student s=hashMap.get("1号");
		System.out.println(s.getName()+":"+s.getAge());
		
                  //遍历
		Iterator<String> it=hashMap.keySet().iterator(); // 获取key的集合,再获取迭代器
		while(it.hasNext()){
			String key=it.next();  // 获取key
			Student student=hashMap.get(key);  // 通过key获取value
			System.out.println("key="+key+" value=["+student.getName()+","+student.getAge()+"]");
		}
	}
}

其他


  • getset、构造函数快捷键 shift+Alt+S
  • eclipse鼠标变成十字,原因:手误 用Shift+Alt+A即可随意切换
  • Head First Java(第2版)中文版 提取码: jzzx
  • 用好API里边什么都有
  • 这是个人笔记,写给我自己看的,所以不是特别详细。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值