泛型
引入泛型
定义:使用泛型可以指代任意对象类型;
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里边什么都有
- 这是个人笔记,写给我自己看的,所以不是特别详细。