JAVA基础: 泛型
来源:互联网 发布:鹏业填报软件 编辑:程序博客网 时间:2024/06/16 21:57
泛型
泛型是javaSE 1.5 的新特性,泛型的本质是参数化类型,这种参数类型可以用在类\接口\方法的创建中,分别成为泛型类\泛型接口\泛型方法.
为什么用泛型
编译的时候检查类型安全,并且所有的强制转换自动和隐式的,提高代码的重用率.
泛型的表示:
<任意的大写字母>省去了强制转换的麻烦(向下转型)类的泛型public class Worker(T){ //成员变量的泛型 private T t; public T getT(){ return t; } public T setT(){ this.t=t; } //成员方法的泛型:调用方法的时候需要创建这个<W>这个泛型类; public <W> void sayHi(W w){ System.out.println(w); } //静态方法的泛型:静态方法随着类的加载而加载<T> //这个<T>是静态方法自己的泛型 public static<T> void print(T t){ } } 接口的泛型:直接在接口名后面声明泛型interface InterA<T>{ public abstract void show(T t);}class InterAImpl implments InterA<String>{ //重写接口中的方法 public void show(String t){ System.out.println(t) }}
需求:声明一个集合保存abcd,并用迭代器遍历
ArrayList<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d");//获取list遍历器ListIterator<String> listiterator = list.listiterator();//创建while循环//正向遍历while(listiterator.hasNext()){ String next = listiterator.next(); System.out.println(next);} //逆向遍历while(listiterator.hasPrevious){ String previous = listiterator.previous(); System.out.println(previous);}
需求:集合中保存3个学生对象,用迭代器遍历(使用泛型)
ArrayList<Student> list = new ArrayList<Student>(); list.add(new Student("张三",12)); list.add(new Student("李四",13)); list.add(new Student("王二",14)); //获取list迭代器 Iterator<Student> iterator = list.Iterator(); //循环 while(iterator.hasNext){ //获取迭代器的值 Student stu = iterator.next(); System.out.println(stu.getName);}
需求:创建两个集合Student和Person,每个集合里面个添加2人,并两个集合互相添加里面的元素
ArrayList<Person> list1 = new ArrayList();list1.add(new Person("张三",56));list1.add(new Person("李四",66));ArrayList<Student> list2 = new ArrayList();list2.add(new Student("王五",13));list2.add(new Student("赵四",16));list1.addAll(list2);System.out.println(list1);
删除的三种方式(遍历的三种方法)
ArrayList<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("b"); strings.add("d"); //不适用迭代器遍历,用for循环(strings.get(i)) //如果集合中有"b"就删除它 for (int i = 0; i < strings.size(); i++) { if (strings.get(i).equals("b")) { //i--表示每次删除后都把坐标回调一次,为了保证删除后也能遍历到数组每一个元素; strings.remove(i--); } System.out.println(strings.get(i)); }
迭代器删除 //如果要添加元素,要使用list中特有的迭代器 //Listiterator ArrayList<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); Iterator<String> iterator = strings.iterator(); while (iterator.hasNext()) { String next = (String) iterator.next(); if (iterator.next().equals("b")) { //让迭代器去删除 iterator.remove(); } } System.out.println(strings);
ArrayList<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); //冒号后,是要遍历的容器 //冒号前,是你要遍历的容器中每一种元素 //增强for循环的底层是用迭代器实现的 //一般只用来打印,不要做删除的操作 for (String string : strings) { System.out.println(string); }
collection 中的 sort (list) 方法
系统自动提供了排序方法,但是里面没有具体的排序规则,所以这是系统有提供了一个接口,让你去实现这儿接口,接口中需要写排序规则(回调思想)
集合中有什么对象,就让该对象去实现这个接口
使用collections中的sort方法排序步骤
1.让集合中被排序的对象的类,去实现comparable接口
2.实现接口中的抽象方法(排序是按什么规则的方法)
3.编写排序规则
4.调用collections.sort测试
需求:创建一个人物集合并添加五个人物姓名和年龄,先把人物按年龄进行排序,再把人物按着姓名再排序
使用collections中的sort方法并创建排序方法:@Overridepublic int compareTo(Student o) { System.out.println("测试"); // 返回0 两个值相等 // 返回整数 前面的大 // 返回负数 后面的大 // 明确:谁和谁比较 this 和 o 按年龄 return (this.getAge() - o.getAge()); //这里调用的compareTo是谁的方法?是字符串的方法 按姓名首字母 return this.getName().compareTo(o.getName());}
ArrayList<Student> students = new ArrayList<>(); students.add(new Student("奥巴马",56)); students.add(new Student("奥朗德",53)); students.add(new Student("小布什",52)); students.add(new Student("林肯",51)); students.add(new Student("特朗普",55)); //调用系统的排序方法(底层调用了你实现接口中的排序规则方法) Collections.sort(students); System.out.println(students);
需求:一个小型图书馆里面存放了三类书:言情\武侠\穿越.每个分类里面都有两本书,每本书都有不同的页数.
//用泛型 library\kind\bookArrayList<ArrayList<Book>> library = new ArrayList(); //创建小集合把书装进小集合ArrayList<Book> kind1 = new ArrayList(); kind1.add(new Book("金瓶梅",900)); kind1.add(new Book("红楼梦",800)); ArrayList<Book> kind2 = new ArrayList(); kind2.add(new Book("三国演义",950)); kind2.add(new Book("水浒传",860)); ArrayList<Book> kind3 = new ArrayList(); kind3.add(new Book("霸道总裁和美女秘书",990)); kind3.add(new Book("李世民后宫传奇",930)); //然后把按种类把书放进图书馆里面 library.add(kind1); library.add(kind2); library.add(kind3);for(ArrayList<Book> kinds : library){ for(Book book : kinds) System.out.println(book);} System.out.println();
阅读全文
0 0
- Java基础 Java 泛型
- Java语言基础:泛型
- java基础加强--泛型
- Java基础加强---泛型
- Java基础_泛型
- java基础---->泛型
- java基础:泛型
- Java基础复习:泛型
- java基础11 泛型
- 基础---java 泛型
- java基础<泛型>
- java基础_10_泛型
- java基础__泛型
- Java基础:泛型
- Java基础 - 泛型
- java基础加强:泛型
- java基础-泛型
- java基础学习-泛型
- ReactJS 中数组遍历 map的使用
- SQL基础语法
- VI 跳到最后一行和跳到最后一行的最后一个字符
- Transform.Forward和Vector3.Forward的正确使用方法
- udp 封装 可自发自收
- JAVA基础: 泛型
- 压力测试siege
- 495. Teemo Attacking。
- MFC中使用标准库和MFC库冲突问题
- 装系统之新收获
- 位运算
- leetcode—Container With Most Water
- Windows怎么安装Newman
- web API端点设计与请求的形式