目的
了解Java中的泛型并能运用泛型以及集合
内容梗概
1.泛型
2.集合的特点
3.HashMap集合
4.键值对的遍历
具体内容
1.泛型
public class MyClass {
public static void main(String[] args){
// GenericTest<T>,这里T可以换成E,在实现的时候,T这里可以是你需要的任意数据类型,但得是其包装类
GenericTest<String> g1=new GenericTest<>();
g1.test("Jack","mary");
}
}
class GenericTest<T>{
int age;
T a1;
T a2;
public void test(T a1,T a2){
this.a1=a1;
this.a2=a2;
System.out.println(a1.equals(a2));
}
}
2.集合的特点
public class MyClass {
public static void main(String[] args){
// 1.集合里面对象不能重复
HashSet<String> names=new HashSet<>();
// 如果重复则只能加进去一个
// 内部使用HashMap实现 键值对 键key不能重复
names.add("Jack");
names.add("Jack");
System.out.println(names);
// 哈希算法
// 如何实现HashMap里面key不同
// 计算这个key对应的对象的hash值
// 整数:在对象的地址的基础上按照一定的算法计算出来的一个整数
// 如果两个对象相同 那么计算出来的hash值就相同
// HashSet HashMap
// 2.集合是无序的 添加的顺序和存储的顺序无关
names.add("jack");
names.add("mary");
names.add("alice");
System.out.println(names);
// Lambda表达式 删除alice以外的值
names.removeIf(ele -> {
return ele.compareTo("c")>0;
});
System.out.println(names);
// 3.可以排序的集合
TreeSet<Person> score=new TreeSet<>(new Comparator<Person>() {
@Override
public int compare(Person person, Person t1) {
return person.compareTo(t1);
}
});
//用Lambda表达式实现
TreeSet<Person> score=new TreeSet<>((Person p1,Person p2)->p1.compareTo(p2));
score.add(2);
score.add(32);
score.add(1);
Person p1=new Person("jack",23);
Person p2=new Person("amy",25);
Person p3=new Person("bella",22);
score.add(p1);
score.add(p2);
score.add(p3);
// equals() 比较的是对象内部的内容
// 使用的两个对象必须实现Comparable接口里的compareTo()方法
// 在compareTo里面实现具体该如何比较
System.out.println(score);
if (p1.hashCode()==p2.hashCode()){
System.out.println("相同");
}else {
System.out.println("不相同");
}
}
}
class Person implements Comparable{
String name;
int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Object o) {
// 1.判断o对象是不是Person的对象
if (o instanceof Person){
//自己规定比较的策略
Person o1=(Person)o;
if (this.age!=o1.age){
return this.age - o1.age;
}else {
//年龄相同的情况下,比较名字首字母
return this.name.compareTo(o1.name);
}
}else{
return -1;
}
}
}
3.HashMap集合
// 存储数据的特点:键key 值value
// key不能重复 可以是任意对象类型 通常使用字符串String
HashMap<String,Integer> score=new HashMap<>();
// 添加对象
score.put("Chinese",89);
score.put("Math",100);
score.put("English",94);
// 如果相同,则会更改某个键对应的值
score.put("Chinese",91);
// 获取键值对的个数
score.size();
// 获取所有的key
System.out.println(score);
System.out.println(score.keySet());
// 获取所有的值
System.out.println(score.values());
// 获取Entry:key-value
System.out.println(score.entrySet());
// 获取一个键key对应的某一个值
System.out.println(score.get("English"));
4.键值对的遍历
// 1.通过遍历key来得到key对应的值
HashMap<String,Integer> score=new HashMap<>();
score.put("Chinese",89);
score.put("Math",100);
score.put("English",94);
score.put("Chinese",91);
for (String key:score.keySet()) {
// 通过key得到值
int s=score.get(key);
System.out.println("key:"+key+" value:"+s);
}
// 2.通过entrySet 得到entry对象的集合
// 一个entry管理一个键值对 getKey getValue
Set<Map.Entry<String,Integer>> entrys=score.entrySet();
for (Map.Entry entry:entrys){
// 得到entry对应的key
String key=(String) entry.getKey();
// 获取Entry对应的值
Integer value = (Integer)entry.getValue();
System.out.println("key:"+key+" value:"+value);
}
小结
每个人都有自己听课的方法,我觉得在听课的同时敲代码效果会好一点,但是打字速度有点慢,所以之后会更加的练习学过的Demo以及跟上敲代码速度,这样还能复习学过的并且巩固,因为短期记忆如果不经过练习转成长期记忆,印象再深刻也会忘记的。