知识总结
泛型集合
- 概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致
- 特点:
(1)编译时即可检查,而非运行时抛出异常
(2)访问时,不必类型转换(拆箱)
(3)不同泛型之间引用不能相互赋值,泛型不存在多态
泛型
- 概念:约束-规范类型
(E代表通配,可以是任意类型,未指明类型前,为Object,泛型可以动态) - 泛型的场景:
(1) 实例泛型:
类:创建对象时,为类所定义的泛型,进行参数化赋值;
接口:实现接口时,为接口所定义的泛型,进行参数化赋值
(2) 静态泛型:
定义在方法的返回值类型前面,、、<T extends Comparable>、<T extends Comparable<? super T>>
定义在方法的形参列表当中:<?>、<? extends Object>、<? super Integer>,不支持使用&
Collections工具类
概念:集合类工具,定义了除了存取以外的集合常用方法
- public static <T extends Comparable<? super T>>void sort(Listlist)排序,要求:必须实现Comparable,必须可与自身类型比,以及父类类型比
- public static void reverse(List<?>list)反转、倒置元素
- public static void shuffle(List<?>list)随机重置顺序
今日练习
- 有下面代码
interface IA{
void ma();
}
class MyClass implements IA{
public void ma(){}
public String toString(){
return "MyClass toString()";
}
}
public class TestMyClass {
public static void main(String[] args) {
IA ia = new MyClass();
System.out.println(ia);
}
}
选择正确答案:
A.编译不通过,因为IA接口中没有定义toString方法
B.编译通过,输出:“IA@地址”
C.编译通过,输出:“MyClass toString()”
答:C
- 给定一个长度,随机产生一个该长度的字符串,由大写,小写字母以及数字组成。
答:
import java.util.Scanner;
public class TestString {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入字符的长度:");
int i = input.nextInt();
java.util.Random r = new java.util.Random();
String str = "";
StringBuilder sBuilder = new StringBuilder(str);
for(int j = 0 ; j < i ; j++) {
int a = r.nextInt(123);
if(a <= 9){
sBuilder.append(a);
continue;
}
if(a >= 65 && a <= 90){
sBuilder.append((char)a);
continue;
}
if(a >= 97 && a <= 122){
sBuilder.append((char)a);
continue;
}else
j--;
}
str = sBuilder.toString();
System.out.println(str);
}
}
- 给定一个字符串,判断该字符串中是否包含某个子串,求出子串的所有出现位置。
答:
public class TestStringLocal {
public static void main(String[] args) {
String str = "abcd23abc34bcd";
String str2 = "bc";
char[] chr = str2.toCharArray();
if(str.contains(str2)){
for(int i = 0; i < str.length() ; i++){
if(str.indexOf(chr[0],i) != (-1)){
if(str.charAt(i+1) == chr[1]){
i = str.indexOf(chr[0],i);
System.out.println(i);
}
}
}
}else
System.out.println("字符串中" + str + "未包含" + str2 + "字符");
}
}
- 有如下Student对象
有如下List:
List list = new ArrayList();
list.add(new Student(“Tom”,18,100,“class05”));
list.add(new Student(“Jerry”,22,70,“class04”));
list.add(new Student(“Owen”,25,90,“class05”));
list.add(new Student(“Jim”,30,80,“class05”));
list.add(new Student(“Steve”,28,66,“class06”));
list.add(new Student(“Kevin”,24,100,“class04”));
在这个list的基础上,完成下列要求:
(1)计算所有学生的平均年龄
(2)计算各个班级的平均分
答:
import java.util.*;
public class TestStudent {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
list.add(new Student("Tom",18,100,"class05"));
list.add(new Student("Jerry",22,70,"class04"));
list.add(new Student("Owen",25,90,"class05"));
list.add(new Student("Jim",30,80,"class05"));
list.add(new Student("Steve",28,66,"class06"));
list.add(new Student("Kevin",24,100,"class04"));
double sumAge = 0;
for(int i = 0 ; i < list.size() ; i++){
sumAge += list.get(i).age;
}
System.out.println("所有学生平均年龄:" + sumAge/list.size());
int j4 = 0 , j5 = 0 , j6 = 0;
int sum4 = 0 , sum5 = 0 , sum6 = 0;
for(int i = 0 ; i < list.size() ; i++){
if(list.get(i).classNum.charAt(6) == '4'){
j4++;
sum4 += list.get(i).score;
}
if(list.get(i).classNum.charAt(6) == '5'){
j5++;
sum5 += list.get(i).score;
}
if(list.get(i).classNum.charAt(6) == '6'){
j6++;
sum6 += list.get(i).score;
}
}
System.out.println("class04班的平均分为:" + sum4/j4);
System.out.println("class05班的平均分为:" + sum5/j5);
System.out.println("class06班的平均分为:" + sum6/j6);
}
}
class Student{
String name;
int age;
double score;
String classNum;
public Student(String name, int age, double score, String classNum) {
super();
this.name = name;
this.age = age;
this.score = score;
this.classNum = classNum;
}
}