泛型的使用
/*自定义泛型类Person 其中T相当于形式参数负责斩占位,具体数值由实参决定
<T>看作是一种名字为T的数据类型即可
*/
public class Person<T> {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public /*static*/T getGender() { //不是泛型方法,不能用static修饰,因为该方法中的T在new对象的时候才能明确类型
return gender;
}
public void setGender(T gender) {
this.gender = gender;
}
public Person() {
}
public Person(String name, int age, T gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
private String name;
private int age;
private T gender; //不确定用什么类来表示,先用T占位
//自定义泛型方法将参数指定数组中的所有元素打印出来
public static <T1> void printArray(T1[] arr){
for(T1 tt: arr){
System.out.println("tt="+tt);
}
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("Lili",20,"woman");
System.out.println(p2); // Person{name='Lili', age=20, gender=woman}
//在创建对象的同时指定数据类型,用于给T初始化
Person<String> p3 = new Person<>();
p3.setGender("女");
System.out.println(p3);//Person{name='null', age=0, gender=女}
Person<Boolean> p4 = new Person<>();
p4.setGender(true);
System.out.println(p4);Person{name='null', age=0, gender=true}
//调用泛型方法进行测试
Integer[] arr = {11,22,33,44,55};
Person.printArray(arr);//11,22,33,44,55
}
}
泛型类被继承时的处理方式
使用不同的继承方式,在创建对象时传对应类型的参数
通配符
set集合的使用
set系类结合:无序、无重复、无索引
二叉树
有序二叉树
HashMap的遍历
public class HashMapStudy {
public static void main(String[] args) {
//一般来说,最好初始化一下, 小于12的就不要初始化了
// 默认的就是16,因为加载因子是0.75,也就是到16*0.75=12的时候会扩容
Map<String, String> map = new HashMap<>(3);
map.put("welcome","to");
map.put("java","study");
map.put("wechat","best396975802");
//遍历方法1: 先遍历key , 再取出value
System.out.println("遍历方法1: 先遍历key , 再取出value");
for (String key : map.keySet()) {
System.out.println("key is "+key);
System.out.println("value is "+ map.get(key));
}
//遍历方法2: 直接遍历value
System.out.println("遍历方法2: 直接遍历value");
for (String value : map.values()) {
System.out.println("value is "+value);
}
//遍历方法3: 通过遍历entry来取Key和value,推荐的方法!!!
System.out.println("遍历方法3: 通过遍历entry来取Key和value,推荐的方法!!!");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key is "+entry.getKey());
System.out.println("value is "+ entry.getValue());
}
//遍历方法4: 通过forEach方法直接遍历key和value
System.out.println("遍历方法4: 通过forEach方法直接遍历");
map.forEach((key,value)->{
System.out.println("key is "+ key);
System.out.println("value is "+ value);
});
}
}