04.18

package aaa04180;

import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet();
        treeSet.add(new Student(45,"张三"));
        treeSet.add(new Student(150,"李四"));
        treeSet.add(new Student(455,"王五"));
    }
}
class Student{
    private int age;
    private String name;

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }
}

------------------------------------------------------------------------------------------

package aaa04180;

import java.util.TreeSet;

public class Test00 {
    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet();
        treeSet.add(new Student(14,"张三"));
        treeSet.add(new Student(15,"李四"));
        treeSet.add(new Student(45,"王五"));
    }
}
class Student0{
    private int age;
    private String name;

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Student0(int age, String name) {
        this.age = age;
        this.name = name;
    }
}
package aaa04180;

import java.util.Comparator;

public class MyComparator implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        Student student1= (Student) o1;
        Student student2= (Student) o2;
        System.out.println(o1+"===="+o2);
        if(student1.getAge()>student2.getAge()){
            return 1;
        }else if(student1.getAge()<student2.getAge()){
            return -1;
        }else {
            return 0;
        }
    }
}
public class MyComparator1 implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        Student student1= (Student) o1;
        Student student2= (Student) o2;
        System.out.println(o1+"===="+o2);
        if(student1.getAge()>student2.getAge()){
            return 1;
        }else if(student1.getAge()<student2.getAge()){
            return -1;
        }else {
            return 0;
        }
    }
}

==========================================================

map中得每个元素属于键值对模式。 如果往map中添加元素时 需要添加key 和 value. 它也属于一个接口,该接口常见得实现类有: HashMap.

package aaa04180;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

public class Test1 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");
        System.out.println(map);
        Map m1 = new HashMap();
        m1.put("name","孙悟空");
        m1.put("name2","猪八戒");
        map.putAll(m1);
        System.out.println(map);
        map.putIfAbsent("age",400);//Kge不存在放入map中
        map.putIfAbsent("name",500);//Kge存在不放入map中
        System.out.println(map);
        //删除
        map.remove("k3");
        System.out.println(map);
        //清空
//        map.clear();
//        System.out.println(map);
        //
        map.replace("k1","哈哈哈哈哈");
        System.out.println(map);
    }
}
import java.util.HashMap;
import java.util.Map;

public class Test11 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");
        System.out.println(map);
        Map m1 = new HashMap();
        m1.put("name","孙悟空");
        m1.put("name2","猪八戒");
        map.putAll(m1);
        System.out.println(map);
        map.putIfAbsent("age",400);
        map.putIfAbsent("name",500);
        System.out.println(map);
        map.remove("k3");
        System.out.println(map);
//      map.clear();
//      System.out.println(map);
        map.replace("k1","哈哈哈哈哈");
        System.out.println(map);
    }
}

{k1=v1, k2=v2, k3=v3, k4=v4}
{k1=v1, k2=v2, k3=v3, name=孙悟空, k4=v4, name2=猪八戒}
{k1=v1, k2=v2, k3=v3, name=孙悟空, k4=v4, name2=猪八戒, age=400}
{k1=v1, k2=v2, name=孙悟空, k4=v4, name2=猪八戒, age=400}
{k1=哈哈哈哈哈, k2=v2, name=孙悟空, k4=v4, name2=猪八戒, age=400}

Process finished with exit code 0

HashMap的底层原理(JDK1.8):

存储元素使用得put(key,value),根据key得hash计算出相应得哈希值,根据相应得算法求出该元素在数组中得位置, 如果求出得哈希值相同,则称为哈希冲突,会根据equals来判断元素是否一致,如果equals不同,则存入单向链表上, 如果哈希碰撞得个数超过8个,则把链表转换为红黑二叉树。

JDK1.7和JDK1.8 HashMap得区别。
   JDK1.7使用得数据结构: 数组+链表  而且链表插入模式为头部插入(造成死循环)。
   jdk1.8使用得数据结构: 数组+链表+红黑树 而且链表得插入模式为尾部插入。

黑红二叉树,查询效率很高但非常消耗资源 /

package aaa04180;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test2 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");
        //查询
        boolean f = map.containsKey("k4");
        System.out.println(f);
        //根据Key获得Value植
        Object v = map.get("k3");
        System.out.println(v);
        //返回所有的Key
        Set keys = map.keySet();
        System.out.println(keys);
        //遍历
        for (Object k:keys){
            Object value = map.get(k);
            System.out.println(k+"=============="+value);
        }
    }
}
public class Test22 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");
        boolean f = map.containsKey("k4");
        System.out.println(f);
        Object v = map.get("k3");
        System.out.println(v);
        Set keys = map.keySet();
        System.out.println(keys);
        for (Object k:keys){
            Object value = map.get(k);
            System.out.println(k+"=============="+value);
        }
    }
}

true
v3
[k1, k2, k3, k4]
k1==============v1
k2==============v2
k3==============v3
k4==============v4

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值